C# 多线程与UI响应
C#多线程与UI响应的问题.我的程序有两个线程,一个主线程,一个通信线程.通信线程会更新大量UI界面.因为.net禁止跨线程访问.所有我用委托来解决跨线程.但是碰到一个问...
C# 多线程与UI响应 的问题.
我的程序有两个线程,一个主线程,一个通信线程.
通信线程会更新大量UI界面.
因为.net 禁止跨线程访问.所有我用委托来解决跨线程.
但是碰到一个问题,就是UI界面会有卡壳,滞后的现象.
这个怎么解决呢? 展开
我的程序有两个线程,一个主线程,一个通信线程.
通信线程会更新大量UI界面.
因为.net 禁止跨线程访问.所有我用委托来解决跨线程.
但是碰到一个问题,就是UI界面会有卡壳,滞后的现象.
这个怎么解决呢? 展开
2个回答
展开全部
楼主哥哥可以使用委托,使用Delegate
我给楼主一点提示:
首先,在你要工作的类work中定义一个委托:
public delegate void refresh(string xxx);
然后,定义你的工作函数,比如你的通信函数
public void connect(string xxx){ .....;.....;label.text="ok";}//这里的label我的意思就是你所要更新的UI控件,只是一个例子,你可以在你的工作类里定义很多你需要更新的控件。
最后,在你需要调用函数function的地方,添加
function{label.BeginInvoke(new refresh(connect),"xxx");}
这样,完成你的工作类的定义
在main函数里,把你的线程绑定到这个工作函数:
Thread thread =new Thread(new ThreadStart(work.function);//这里我是新建了个线程,你可以用你自己的线程
然后,main中如果有一个label1
work.label=this.label1;//把这个label1赋到你的工作类 work中定义的那个的label,然后你就可以看到,界面中的label1的text刷新了。
跨线程调用无压力,随意调用,楼主不清楚的话,可以Message我。
我给楼主一点提示:
首先,在你要工作的类work中定义一个委托:
public delegate void refresh(string xxx);
然后,定义你的工作函数,比如你的通信函数
public void connect(string xxx){ .....;.....;label.text="ok";}//这里的label我的意思就是你所要更新的UI控件,只是一个例子,你可以在你的工作类里定义很多你需要更新的控件。
最后,在你需要调用函数function的地方,添加
function{label.BeginInvoke(new refresh(connect),"xxx");}
这样,完成你的工作类的定义
在main函数里,把你的线程绑定到这个工作函数:
Thread thread =new Thread(new ThreadStart(work.function);//这里我是新建了个线程,你可以用你自己的线程
然后,main中如果有一个label1
work.label=this.label1;//把这个label1赋到你的工作类 work中定义的那个的label,然后你就可以看到,界面中的label1的text刷新了。
跨线程调用无压力,随意调用,楼主不清楚的话,可以Message我。
追问
你们说的委托,网上一搜以把.还用单独提问么?!
我汗
我的问题不是这些
追答
backgroudwork 可以试试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询