Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#运行进程而不冻结我的应用程序';s图形用户界面_C#_Multithreading_Process - Fatal编程技术网

c#运行进程而不冻结我的应用程序';s图形用户界面

c#运行进程而不冻结我的应用程序';s图形用户界面,c#,multithreading,process,C#,Multithreading,Process,我想启动一个进程(调用另一个程序),目前外部程序需要时间(这是正常的) 但它冻结了我的GUI 我看到了很多例子,我正在学习,很难理解, 尝试阅读和学习线程,但这不是那么容易(至少对我来说) 好的简单教程还是代码示例 干杯这里有一个链接,展示了如何使用异步方法。 您可以使用异步方法来启动流程,并且在启动时不会冻结gui void Your_Method() { //Start process here } MethodInvoker myProcessStarter= new Meth

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

但它冻结了我的GUI 我看到了很多例子,我正在学习,很难理解, 尝试阅读和学习线程,但这不是那么容易(至少对我来说) 好的简单教程还是代码示例


干杯

这里有一个链接,展示了如何使用异步方法。

您可以使用异步方法来启动流程,并且在启动时不会冻结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()对为。是吗?是的,我错过了。打字太快了。