日期:2014-05-17  浏览次数:20927 次

C#多线程使程序变龟速
为什么每次写个程序,虽然界面很卡,但是至少卡一会儿就出来了算完了,要是我添加了多线程,能实时通过状态条更新运行状态,那么程序就会运行非常慢,不知道什么原因。
抑或是我使用多线程的方式不对还是怎么地?我是使用的一般的方法开的新线程如下
        
private void btnSample_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(MyFunction);
            thread.IsBackground = true;
            thread.Start();
        }
private void MyFunction()
{
    //运行程序
    ...
}
多线程 C# 界面 速度慢 方法

------解决方案--------------------
你具体的后台实现代码是什么了?你同时可以参考这个博客去更多了解多线程:http://www.cnblogs.com/zhili/category/475336.html
------解决方案--------------------
你是每次点击都会新实例化一个线程,问题应该不大,不知道你那线程运行的是什么代码
------解决方案--------------------
MyFunction()不贴出来,别人怎么帮你分析
------解决方案--------------------
状态条更新太频繁吧。。。如果一个只要10秒就能执行完的程序,你不停的去更新刷新UI,可能就要几分钟了。
------解决方案--------------------
你代码编写的有问题吧,更新那块的代码贴上来看下。
------解决方案--------------------
你就别显示进度条了,另外thread.IsBackground?=?true;去掉,让它跑足了资源。
------解决方案--------------------
如果数据量很大,运算以很快,就没必要实时更新状态了
可以间歇性的(比如每运算了100个数据)更新一下界面,视觉上也区分不了闪得太快的的东西
搜索一下BackgroudWork,支持取消,已经封装好了

------解决方案--------------------
前台线程的优先级略高于普通线程,所以如果你过于频繁地更新界面,自然会争用其他线程的CPU时间
------解决方案--------------------
引用:
更新的代码很简单的一句话
this.label1.Text=layer.Name+"/"+pFeature.OID;
或者只更新图层名