Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Windows_Multithreading - Fatal编程技术网

C#:当我尝试移动窗口时,窗口会挂起,单击“外部”或“最小化”

C#:当我尝试移动窗口时,窗口会挂起,单击“外部”或“最小化”,c#,.net,windows,multithreading,C#,.net,Windows,Multithreading,这是我尝试运行的应用程序的图片: 当我尝试单击外部、移动或最小化时,窗口将挂起: 我的代码: 公共作废流程() { //使用(HalconDotNet.HWindowControl HWinCtrl=new HalconDotNet.HWindowControl()) // { 使用(PitFindEngine VisionEngine=new PitFindEngine()) { foreach(JPEG文件中的字符串JPEG文件) { 尝试 { 字符串[]part

这是我尝试运行的应用程序的图片:

当我尝试单击外部、移动或最小化时,窗口将挂起:

我的代码:

公共作废流程()
{
//使用(HalconDotNet.HWindowControl HWinCtrl=new HalconDotNet.HWindowControl())
//            {
使用(PitFindEngine VisionEngine=new PitFindEngine())
{
foreach(JPEG文件中的字符串JPEG文件)
{
尝试
{
字符串[]parts1=jpegfile.Split('\\');
字符串[]parts2=parts1[parts1.Length-1]。拆分('.')[0]。拆分('.');
字符串行=parts2[parts2.Length-2]。拆分('R')[1];
字符串col=parts2[parts2.Length-1]。拆分('C')[1];
添加(行+“”+列,VisionEngine.action(JPEG文件,“生产”);
//FormControls.ProgressBar_DoStep();
}
捕获(例外e)
{
}
}
}

}
此时您似乎不再使用线程列表。您的整个流程方法应该启动一个新线程。然后确保您修改了ProgressBar的事件,它正在进行。一旦所有这些代码都在一个单独的线程上运行,您的UI就不应该因此而冻结。

问题是,当您为自己运行更长的任务时应用程序它会阻止
UI
,直到订单完成。这是因为您的任务会阻止此订单的
main线程
,因此
UI
无法响应,因为它也在
main线程
中运行。因为
UI
不响应窗口,它会告诉您:嘿,当心,此窗口不响应响应当前的任何用户操作

即使你的应用程序在后台做了很多事情(你分配给你的应用程序做的事情),但这对用户和Windows来说并不重要。问题是,一旦您再次单击应用程序,被阻止的
UI
,Windows仍会注意到这一点,并建议您关闭窗口,因为应用程序似乎已被卡住

只需在长时间运行的任务中使用即可。其行为如下:

调用此方法将导致在处理所有等待的窗口消息时挂起当前线程

因此,它会暂停当前长时间运行的任务,以处理来自用户输入的Windows消息,从而最大化、移动……窗口。之后,它将继续处理长时间运行的订单

Application.DoEvents();

这意味着,例如,如果您的方法需要10秒才能完成,则调用一次
Application.DoEvents()
会使您的应用程序只处理一次用户操作,这似乎不是您想要的行为。因此,您必须多次调用它。请注意,这会使您的运行方法明显变慢。

仍然没有帮助:(是的,很抱歉没有评论