页面内显示两个TextBox,让‘张三’,‘李四’,‘王五’等不定的人名在TextBox内的几秒一变动的显示,用线程怎么写?
帮忙带解析。。。
都不行啊。。。。
BeginInvoke不存在。
是要用WPF做的
用DispatcherTimer,通过Tick事件,具体的可以搜索下
跟winform当然不一样了
楼主看看这个吧:http://www.cnblogs.com/Zhouyongh/archive/2011/01/12/1933414.html
要返回UI线程 也可以用 Dispatcher.BeginInvoke方法
@囧月:
谢谢,虽然有些方法我没太看明白,我的解决办法是:
delegate void MyDelegate(int value);
Thread t;
int i = 0;
void setValue(int value)
{
txt_name.Text = value.ToString();
}
// 要长时间做的工作
void doWork()
{
MyDelegate A = new MyDelegate(setValue);
while (true)
{
++i;
//---WinForm--
// this.Invoke(d, i);
//----WPF---added by wonsoft.cn---
this.Dispatcher.Invoke(A, i);
// if (i == 3)
// {
// i = 0;
// }
Thread.Sleep(5000);
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
t = new Thread(doWork);
t.Start();
}
我呢是刚接触线程,我现在理解线程就是相当于一个委托事件,这个委托事件是一个无限循环的,可以设置他执行停顿时间。
不知道这样理解是否正确???请指教!!
@..00..: 线程和进程概念类似,有些异步也有类似的。
了解ui线程和后台线程,以及它们的用途,基本上就理解了。楼主这个功能用timer其实更合适
@囧月: timer我再看看,现在呢我想问一下,我现在要做刷卡界面的,我就用上面得代码,把“i”的值该为刷卡人的ID,然后void setValue(int value)这个方法里面通过ID查询信息在显示到界面上。这样写对吗?或者用没有其他的方法?
@..00..: 查询信息这种没有UI交互的,可以不用Dispatcher.Invoke,查询完成之后再Dispatcher.Invoke就好了
//你感受一下,每5秒执行一次。 Int32 index = 0; System.Threading.Timer t = new System.Threading.Timer((obj) => { BeginInvoke(new Action(() => { textBox1.Text = index + ""; })); index++; }, null, 0, 5 * 1000);
学习了
使用Dispatcher,跟UI交互