WinForm应用程序UI在长期运行过程中挂起

WinForm应用程序UI在长期运行过程中挂起

我有一个windows窗体应用程序,在这个应用程序上我需要使用一个for循环,它有大量的远程调用(大约2000-3000次调用),

在执行for循环时,我放松了对Form和Form控件的控制,因为它变成了一个大进程,有时它显示出“没有响应”-但是如果我等了很长时间,它又回来了,我想我需要使用一些线程模型来解决这个问题,有什么办法解决这个问题吗?


四季花海
浏览 716回答 3
3回答

30秒到达战场

    private voidForm_Load(object sender, EventArgs e)     {         MethodInvoker mk = delegate         {             //your job         };         mk.BeginInvoke(callbackfunction, null);     }     private void callbackfunction(IAsyncResult res)     {         // it will be called when your job finishes.     }使用MethodInvoker是最简单的方法。

qq_花开花谢_0

不需要线。使用Application.DoEvents(); //repaint or respond to msg例如:foreach (DirectoryInfo subDir in dirInfo.EnumerateDirectories()){     count = count + 1;     listBoxControl4.Items.Add(count.ToString() + ":" + subDir.FullName);     Application.DoEvents(); //allow repaint to see status     ProduceListing(subDir, " ");}这将递归地遍历所有文件夹,并将名称写入列表框。这可能需要很长时间。使用DoEvents(),它将显示每个循环的进度。基本上,调用允许此线程上的窗口更新windows msg循环中的任何内容。确保注意无意中的递归,因为窗体上的任何控件都会再次被单击,即使您的第一个控件尚未完成。这个效果很好。(这是旧的Delphi应用程序的副本。ProcessMessages()调用。你可以搜索它,看看它为什么工作,以及观察什么。
打开App,查看更多内容
随时随地看视频慕课网APP