Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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#表单冻结?_C#_Multithreading - Fatal编程技术网

如何在运行另一个进程时阻止我的C#表单冻结?

如何在运行另一个进程时阻止我的C#表单冻结?,c#,multithreading,C#,Multithreading,我正在从Windows窗体启动Selenium。一旦selenium启动,表单将被冻结,直到selenium完成,然后UI将更新并再次单击 启动驱动程序的代码: using(var drivers = new PhantomJSDriver(@"C:\Users\Me\Documents")) 当PhantomJS运行时,如何使UI响应 当PhantomJS在应用程序中运行时,如何使UI响应 背景 不确定是否在单独的线程中运行它们(因为您标记了C);如果是,请确保您没有等待该线程。意味着,如果

我正在从Windows窗体启动Selenium。一旦selenium启动,表单将被冻结,直到selenium完成,然后UI将更新并再次单击

启动驱动程序的代码:

using(var drivers = new PhantomJSDriver(@"C:\Users\Me\Documents"))
当PhantomJS运行时,如何使UI响应

当PhantomJS在应用程序中运行时,如何使UI响应 背景

不确定是否在单独的线程中运行它们(因为您标记了
C
);如果是,请确保您没有等待该线程。意味着,如果您使用的是
System.Threading.Thread
,那么您就没有对线程实例的
Join()
方法调用(或者)如果您使用的是
Task
,那么您就没有调用
WaitAll()
WaitAny()
。因为,如果它存在,意味着您的UI线程实际上正在等待bg线程完成,然后它才能开始自己的处理,而这正是您不想做的


根据您的评论:在这种情况下,您可以选择在UI线程之外的单独线程上运行
PhantomJS
。您可以使用。

也许您应该在“我从Windows窗体启动Selenium”周围添加一点代码,让我们尝试了解代码不起作用的原因。如果您在UI线程上运行阻止操作,它将完全执行以下操作:阻止UI线程。我没有实现任何多线程。所有这些都是通过按钮点击事件运行的。@用户,那么你怎么说PhantomJS在后台运行?你说得对,它不在后台。措词选择不当。我这样称呼它,因为phantomjs是不可见的(无头的),但它不在背景中。@User:没错。如果它都在一个按钮点击处理程序中运行,则它在UI线程上运行,防止UI执行其他操作。@用户,在单独的线程中运行它。请参见答案中的编辑。已经给出了MSDN文档链接,这将使您继续。