2 werqxz werqxz 于 2016.04.20 17:32 提问

c#,winform,为防止界面卡死,新建线程运行耗时算法,速度骤降

原本单线程下3分钟,创建个线程这么做之后要35分钟,各位大哥大姐行行好,告诉我这个怎么破?

 //齐套分析按钮事件
        private void btnQtfx_Click(object sender, EventArgs e)
        {
            qtfxStart();            //启动进度条
            if (gridView1.RowCount > 0)
            {
                int[] selected = this.gridView1.GetSelectedRows();          //得到选中行
                calculateThread = new Thread(new ParameterizedThreadStart(qtfx));
                //calculateThread.Priority = ThreadPriority.Highest;
                calculateThread.Name = "分析线程";
                calculateThread.Start(selected);                //把选中行索引传到qtfx方法
            }
            else
            {
                MessageBox.Show("没有数据");
            }
        }
        //齐套分析
        private void qtfx(Object o)
        {

            int[] selected = (int[])o;          //得到传进来的参数
            AnalysisManage am = new AnalysisManage(dt_storey, dt_onway);
            DateTime begin = DateTime.Now;      
            DataTable dt = am.analysis(selected);                         //齐套分析,问题在这一句,最耗时
            CallbackWithDT qt = new CallbackWithDT(qtfxDone);
            this.Invoke(qt, new object[] { dt });                           //把分析结果传到“窗体线程”
            DateTime end = DateTime.Now;
            MessageBox.Show((end - begin).ToString());
        }

1个回答

caozhy
caozhy   Ds   Rxr 2016.04.20 19:49

qtfxDone函数怎么写的,am.analysis怎么实现的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
最简单解决c#在UI线程中执行耗时方法导致界面假死的方法
int sta = my_connect.login(_user_name, _password);如上,login方法中通过http向服务器发请求,在网络状况不好或者服务器繁忙的时候,会因为迟迟等不到返回结果导致页面假死。解决办法:int sta = await Task.Run(() => { return my_connect.logi
c#多线程防止界面卡死
当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决 一个主线程来创建界面,使用一个子线程来执行程序并更新主界面 这个问题其实也困或了我很久,但是今天终于解决了,而且我发现很多人有这样的问题,所以我分享一个例子方便大家参考吧。 先来看看我的界面 当我点击开启线程后 下面是我的
winform异步线程防止界面卡死
winform异步线程防止界面卡死
winform防止界面卡死的三种方法
在编程过程中经常会遇到耗时操作,这个时候如果不采取一些必要的异步操作,就会导致界面的卡死,这里以winform为例子,介绍三种方法防止界面卡死,对这几个方法稍加修改同样适用于wpf,silverlight等程序 首先给出一个函数模拟耗时操作 1使用委托+QueueUserWorkItem delegate void ChangeInvoke(int num) ;private void Ch
C#多线程解决界面卡死问题的完美解决方案
C#多线程解决界面卡死问题的完美解决方案
C# 多线程防止卡死
软件界面的响应特性是判断一款软件的非常重要的方面。一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题。     要提高界面的响应特性,最好的办法莫过于使用多线程,并把呈现界面的线程独立出来。以前只有使用C++才能实现的多线程功能,现在在.Net框架下,所有的语言(包括VB)都可以使用了。不过,使用多线程比使用单一线程
解决C#界面假死问题
前几天做ArcEngine二次开发时做到连接ArcSDE数据库这一块,感觉连接ArcSDE的时间有点长,想着在连接ArcSDE之前跳出一个带等待动画的界面等待ArcSDE的链接,于是写了如下代码: private void buttonX1_Click(object sender, EventArgs e)//button1在主窗口中 { Waitting waitting = new
C# winform程序防止前台卡死
在实际开发中,如果需要实时的显示后台处理的情况,我们可能要在前台用一些控件去显示 所以我们可能会写诸如label1.text=...,button1.hide();等等这样的代码,但是我们会发现并不会立刻显示,作为一只菜鸟,w
解决winform编程中使用线程界面卡死的案例
解决winform编程中使用线程界面卡死的案例 用了委托
Qt中针对比较耗时的工作防止界面假死的处理方式
Qt中对于一些比较耗时的工作,如下载数据的同步操作,可能会使主线程处于等待状态,导致界面假死,针对此种情况,我们可以使用一个定时器和人工进行事件循环代码如下: m_nTimerID = startTimer(500);  while (!m_bFileDownloaded)       {            QCoreApplication::processEvents(QEvent