问题:在定时器时间到来的函数里对Lable Content赋值就是说,被另一个线程调用。建了一个WPF程序,定义了一个Timer(using System.Timers;) public partial class MainWindow : Window
{
private Timer m_Timer; public int Count { get; set; }
定时器设置:
m_Timer = new Timer();
m_Timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
m_Timer.Enabled = false;
m_Timer.Interval = 1000;调用函数:
public void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs args)
{
Count++;
this.lblS.Content = Count;
}this.lblS.Content = Count; 这一句总是会出错!
{
private Timer m_Timer; public int Count { get; set; }
定时器设置:
m_Timer = new Timer();
m_Timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
m_Timer.Enabled = false;
m_Timer.Interval = 1000;调用函数:
public void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs args)
{
Count++;
this.lblS.Content = Count;
}this.lblS.Content = Count; 这一句总是会出错!
this.lblS.Content = Count.ToString();
“InValidOprationException was unhandled by user code”KissXYL,用ToString也不行~
//定义委托
private delegate void UpdateLabelContent(string count);
/// <summary>
/// 跨线程给label赋值
/// </summary>
private void updateLableContent(string count)
{ if (this.lblS.InvokeRequired)
{
UpdateLabelContent d = new UpdateLabelContent(updateLableContent);
this.BeginInvoke(d, new object[] {count});
}
else
{
this.lblS.Content = count;
}
}//然后赋值的时候就
public void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs args)
{
Count++;
UpdateLabelContent(Count);
}
label没有InvokeRequired属性,还有一个问题BeginInvoke也不是Window的函数,不知道怎么加~@@
反正他的意思就是 你能在非ui线程里面去给ui线程里面的控件赋值
在winform里面是我那种方式解决的
看错题了 抱歉
还有解决方法吗?
在WPF里面可以用 DispatcherTimer m_Timer = new DispatcherTimer();
这个类,就可以直接赋Content ~~
OYE~结贴~~~