我的应用程序是系统托盘应用程序,使用C#,.NET 4.0。许多线程,一种方法失败
我试图一次显示许多PDF文件,每个PDF应该与其他窗口分割屏幕,我通过ProcessName确定,这就是全部。
难度在于我需要等到用户关闭该窗口(.WaitForExit()方法),因为稍后我将删除PDF文件。这里出现问题。
在第一个线程中一切正常,但问题是当我尝试显示第二个PDF文件窗口processList [0] THOUGH MoveWindow函数返回true,并且对该窗口的处理也是正确的只有pdf窗口正在调整大小,另一个窗口失败。
在main方法我要创建的唯一线程(我称之为这段代码几次,每次用户希望看到的PDF文件):
Thread pdfThread = new Thread(() => ShowPdfFile(fullPath));
pdfThread.Start();
然后(简化代码)
public static void ShowPdfFile(string fileName)
{
try
{
Process pdfProcess = Process.Start(fileName);
Thread.Sleep(500);
string windowTitle = GetActiveWindowTitle();
IntPtr pdfHandle = (IntPtr)FindWindow(null, windowTitle);
MoveWindow(pdfHandle, 0, 0, 0, 0, true);
Process[] processList = Process.GetProcessesByName("someProcess");
MoveWindow(processList[0].MainWindowHandle, 0, 0, 0, 0, true);
pdfProcess.WaitForExit();
MoveWindow(processList[0].MainWindowHandle, 0, 0, max, max, true);
}
catch (Exception ex)
{
LogToFile(ex);
}
finally
{
try
{
File.Delete(fileName);
}
catch
{
LogToFile("Cannot delete file");
}
}
更新:嗯,我整天都在调试它,但现在我注意到在第二个线程它不等待在线pdfProcess.WaitForExit(); 我应该改变什么来强制线程等待确切的pdfProcess退出?
你能详细说明这个问题吗? –
我认为这基本上都是。你还想知道什么? – DinosaurTom
我无法动摇你的问题究竟是什么? –