您的位置:无忧脚本
» 忘记密码 又忘了密码
» 日志
.NET中访问不同线程UI元素解决方法
上一篇 /
下一篇 2008-05-17 10:12:05
/ 个人分类:.net
|
|
在线程中是不能直接访问UI控件,但是有时候又确实要访问,这对于初学者来说可能有些困难,现就简单的说明一下方法,希望有所帮助。 比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox.. 实现:
using System.Threading;
//启动一个线程 Thread thread=new Thread(new ThreadStart(updateText)); thread.Start();
//线程方法 private void updateText() { //将界面的TextBox内容设置一下 this.TextBox1.Text="Hello Word"; }
如果你像上面操作,在.Net 2.0里是会有异常的,会提示访问不本线程的控件。 正确的做法是用Invoke.. 改为如下:
//定义一个委托 public delegate void MyInvoke(string str); //更新界面的方法 private void UpdateTextBox(string str); { //更新 this.TextBox1.Text=str; }
//启动一个线程 Thread thread=new Thread(new ThreadStart(DoWork)); thread.Start();
//线程方法 private void DoWork() { //其他操作 //比如将界面的TextBox内容设置一下 MyInvoke mi=new MyInvoke(UpdateTextBox); this.BeginInvoke(mi,new object[]...{"我是一个文本框"}); }
如果是.Net 3.0或者3.5的话,还可以通过另一个方法 比如启动一个Timer线程在窗体的Image上画拆线
delegate void doDrawing();
Timer timer = new Timer();
timer.Interval = 1000; timer.Elapsed += new ElapsedEventHandler(StartDrawing);
timer.Start();
private void StartDrawing(object o,ElapsedEventArgs e) { //访问不同线程UI if (this.Dispatcher.Thread != System.Threading.Thread.CurrentThread) { this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,new doDrawing(Draw)); } }
//画折线图 private void Draw() {
//do your drawing
} | |
导入论坛
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
多线程