c#运行进程而不冻结我的应用程序';s图形用户界面
我想启动一个进程(调用另一个程序),目前外部程序需要时间(这是正常的) 但它冻结了我的GUI 我看到了很多例子,我正在学习,很难理解, 尝试阅读和学习线程,但这不是那么容易(至少对我来说) 好的简单教程还是代码示例c#运行进程而不冻结我的应用程序';s图形用户界面,c#,multithreading,process,C#,Multithreading,Process,我想启动一个进程(调用另一个程序),目前外部程序需要时间(这是正常的) 但它冻结了我的GUI 我看到了很多例子,我正在学习,很难理解, 尝试阅读和学习线程,但这不是那么容易(至少对我来说) 好的简单教程还是代码示例 干杯这里有一个链接,展示了如何使用异步方法。 您可以使用异步方法来启动流程,并且在启动时不会冻结gui void Your_Method() { //Start process here } MethodInvoker myProcessStarter= new Meth
干杯这里有一个链接,展示了如何使用异步方法。 您可以使用异步方法来启动流程,并且在启动时不会冻结gui
void Your_Method()
{
//Start process here
}
MethodInvoker myProcessStarter= new MethodInvoker(Your_Method);
myProcessStarter.BeginInvoke(null, null);
这里有一个链接,显示如何使用异步方法。 您可以使用异步方法来启动流程,并且在启动时不会冻结gui
void Your_Method()
{
//Start process here
}
MethodInvoker myProcessStarter= new MethodInvoker(Your_Method);
myProcessStarter.BeginInvoke(null, null);
BackgroundWorker正是为这种场景而设计的 看 它提供了一些有用的方法来发送信号(两种方式),而不需要您自己处理回UI线程的调用
或者使用…BackgroundWorker就是为这种场景设计的 看 它提供了一些有用的方法来发送信号(两种方式),而不需要您自己处理回UI线程的调用 或者使用…使用以下命令: 在顶部声明:
BackgroundWorker backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
然后以表格形式加载:
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)
{
}
使用以下命令:
在顶部声明:
BackgroundWorker backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
然后以表格形式加载:
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)
{
}
向我们展示您正在使用的代码,我们可能会提供帮助。如果缺少基本原理,事情就会变得困难。向我们展示您正在使用的代码,我们可能会提供帮助。如果缺少基本原理,事情就会变得困难。Invoke()不是异步的。BeginInvoke()/.EndInvoke()对为。是吗?是的,我错过了。键入太快..Invoke()不是异步的。BeginInvoke()/.EndInvoke()对为。是吗?是的,我错过了。打字太快了。