今天我想在表单中打开应用程序,但它会导致错误。
if (File.Exists(ts3))
{
Process p = Process.Start(ts3);
Thread.Sleep(2000);
SetParent(p.MainWindowHandle, panel1.Handle);
}
foreach (var process in Process.GetProcessesByName(ts3check))
{
process.Kill();
}
Thread.Sleep(500);
Process p = Process.Start(ts3);
Thread.Sleep(2000);
SetParent(p.MainWindowHandle, panel1.Handle);
它应该检查,如果这个应用程序已经打开,如果是,请将其杀死并在我的表单中打开新的应用程序。但是当我尝试在表单中打开进程时,它将导致致命错误并使我的表单停止工作。我看了半个小时,我看不到它。
编辑:如果应用程序尚未打开,应用程序可以正常运行,但如果是,它将执行此部分代码并发出错误
foreach (var process in Process.GetProcessesByName(ts3check))
{
process.Kill();
}
Thread.Sleep(500);
Process p = Process.Start(ts3);
Thread.Sleep(2000);
SetParent(p.MainWindowHandle, panel1.Handle);
答案 0 :(得分:1)
尝试将Thread.Sleep(2000)
更改为p.WaitForInputIdle()
,您可能还想在CodeProject上查看Hosting EXE Applications in a WinForm project。有人创建了一个控件来完成你正在寻找的东西。