这是场景......
该应用程序在Windows上的VC ++中(我使用的是Visual Studio 2008)。
我有一个父窗口,里面有几个标签和一些控件。在其中一个选项卡中,我从菜单栏中选择它时动态加载了一个应用程序。当子应用程序执行时,父窗口变得无响应,并且关闭应用程序的唯一方法是使用ctrl + alt + del。
但是......
当我在特定菜单项的启动子进程的click事件中添加了一些其他代码时,这个问题才会出现。
以下是代码的两个版本:
namespace MyApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();
proc.StartInfo.Arguments = "some arguments";
proc.StartInfo.FileName = "ApplicationName.exe";
proc.Start();
proc.WaitForInputIdle();
SetParent(proc.MainWindowHandle, panel1.Handle);
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
}
}
以上代码运行正常。
以下是问题代码:
namespace MyApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if(SomeSettings == 1)
{
Process proc = new Process();
proc.StartInfo.Arguments = "some arguments";
proc.StartInfo.FileName = "ApplicationName.exe";
proc.Start();
proc.WaitForInputIdle();
SetParent(proc.MainWindowHandle, panel1.Handle);
textBox1.Text = System.IO.File.ReadAllText("LogFile.log"); //some log file created by the process
}
else
{
//few if-else statements
//few switch-case statements
Process proc = new Process();
proc.StartInfo.Arguments = "some arguments";
proc.StartInfo.FileName = "ApplicationName.exe";
proc.Start();
proc.WaitForInputIdle();
SetParent(proc.MainWindowHandle, panel1.Handle);
textBox1.Text = System.IO.File.ReadAllText("LogFile.log"); //some log file created by the process
}
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
}
}
在执行第二个代码时,父进程启动子进程,但应用程序窗口冻结。
任何人都可以告诉我为什么会发生这种情况...... ???是因为过多的if-else和switch情况,还是因为加载日志文件...... ???以及如何纠正它...... ???
感谢。