2010-05-05 67 views
1

我想启动一个进程(调用其他程序),目前外部程序需要一定的时间(这是正常的)!C#运行过程中我的应用程序的GUI

但冻结我的GUI 只见配发的例子,我学习,这是很难搞清楚, 试图阅读和学习线程,但它不是那么容易(至少对我来说) 和很好的简单教程或代码示例?

欢呼声

+1

向我们展示你正在使用的代码,我们也许能够提供帮助。 – spender 2010-05-05 13:13:52

+0

错过基本面时,事情变得艰难。 – Mohanavel 2010-05-05 15:01:09

回答

5

以下是显示如何使用异步方法的链接。 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

.Invoke()不是异步的。 .BeginInvoke()/。EndInvoke()对。是? – 2010-05-05 15:06:24

+0

是的,我错过了。输入速度太快。 – kemiller2002 2010-05-05 15:57:36

1

BackgroundWorker的是专为正是这种情景。

MSDN

它提供了信号有用的方法(双向)不要求你马歇尔回调到UI线程自己。

或者使用Task Parallel Library ...

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) 
    { 
    }