在父窗口中执行子进程时,父窗口冻结

时间:2012-01-09 14:57:12

标签: windows visual-studio-2008 visual-c++

这是场景...... 该应用程序在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情况,还是因为加载日志文件...... ???以及如何纠正它...... ???

感谢。

0 个答案:

没有答案