c#运行进程而不冻结我的应用程序的GUI

时间:2010-05-05 13:11:11

标签: c# multithreading process

我想启动一个进程(调用另一个程序),目前外部程序需要时间(这是正常的)!

但它会冻结我的GUI 我看到了很多例子,我正在学习,很难弄清楚, 试图阅读和学习线程,但它并不那么容易(至少对我而言) 和简单的教程或代码示例?

欢呼声

3 个答案:

答案 0 :(得分:6)

这是一个显示如何使用异步方法的链接。 http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx

您可以使用异步方法启动进程,并且在启动时不会冻结gui。

void Your_Method()
{
   //Start process here
}


MethodInvoker myProcessStarter= new MethodInvoker(Your_Method);

myProcessStarter.BeginInvoke(null, null);

MethodInvoker Description

答案 1 :(得分:1)

BackgroundWorker就是为这种情况而设计的。

请参阅MSDN

它为信令(两种方式)提供了有用的方法,这些方法不需要您自己将回调编组回UI线程。

或使用Task Parallel Library ...

答案 2 :(得分:1)

使用此:

在顶部声明:

BackgroundWorker backgroundWorker1 = new System.ComponentModel.BackgroundWorker();

然后在form_load中:

          backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
            backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

之后:

backgroundWorker1.RunWorkerAsync(someArg); // this calls  backgroundWorker1_DoWork(....


    // This event handler is where the actual,
    // potentially time-consuming work is done.
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    }