Re: [问题] 循环暂停并更新控件

楼主: testSV (喔喔喔喔喔)   2015-02-01 15:40:49
工作要开在别的Thread里面
为确保Thread在程式结束后会消失 偷懒的话设IsBackground=true
要不然得另外弄flag来同步 e.g. while(IsRunning){....}
另外要注意一点
如果要存取DependencyObject的成员
必须要在同个Thread内呼叫
否则会出现"呼叫执行绪无法存取此物件,因为此物件属于另一个执行绪。"的错误
所以必须透过Dispatcher.Invoke来存取
下面的例子
就是会开个Thread 每隔一秒钟后会更改Title
因为偷懒 所以直接用匿名delegate做掉
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Threading.Thread thread = new System.Threading.Thread(
delegate()
{
Int16 i=0;
//做某些事情
while (i<10)
{
System.Threading.Thread.Sleep(1000);
i++;
//直接存取会出错
//this.Title = i.ToString();
this.Dispatcher.Invoke(
new Action(
delegate()
{
this.Title = i.ToString();
}
)
);
}
}
);
thread.Start();
}
另外针对你的应用
可以用System.Windows.Threading.DispatcherTimer比较快
System.Windows.Threading.DispatcherTimer timer =
new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick +=
delegate(object oo, EventArgs ee)
{
i++;
this.Title = i.ToString();
};
timer.Start();

Links booklink

Contact Us: admin [ a t ] ucptt.com