为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
四季花海 2019-07-08 12:44:57
WinForm应用程序UI在长期运行过程中挂起我有一个windows窗体应用程序,在这个应用程序上我需要使用一个for循环,它有大量的远程调用(大约2000-3000次调用),在执行for循环时,我放松了对Form和Form控件的控制,因为它变成了一个大进程,有时它显示出“没有响应”-但是如果我等了很长时间,它又回来了,我想我需要使用一些线程模型来解决这个问题,有什么办法解决这个问题吗?
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

    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是最简单的方法。


查看完整回答
反对 回复 2019-07-08
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

不需要线。使用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()调用。你可以搜索它,看看它为什么工作,以及观察什么。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 715 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信