WPF中的线程问题

时间:2009-04-08 05:48:51

标签: wpf multithreading

我得到了这个例外

  

System.InvalidOperationException是   用户代码未处理Message =“The   调用线程无法访问它   对象,因为不同的线程拥有   它“。

每当我运行以下代码时

public partial class MainScreen : Window
{
        Timer trm;

        public MainScreen()
        {
            InitializeComponent();

            trm = new Timer(1000);
            trm.AutoReset = true;
            trm.Start();
            trm.Elapsed += new ElapsedEventHandler(trm_Elapsed);
        }

        void trm_Elapsed(object sender, ElapsedEventArgs e)
        {
            lblTime.Content = System.DateTime.Now;
        }
}
任何解决方案......我非常想要摆脱它:(

3 个答案:

答案 0 :(得分:3)

改为使用DispatcherTimer:

public partial class MainScreen : Window{
DispatcherTimer tmr;    
public MainScreen() {
InitializeComponent();
tmr = new DispatcherTimer();
tmr.Tick += new EventHandler(tmr_Tick);
tmr.Start();    
}
void tmr_Tick(object sender, EventArgs e) {
    lblTime.Content = System.DateTime.Now;
}
}

答案 1 :(得分:0)

每次修改Windows控件时,都必须在UI线程(创建控件的线程)上执行此操作。

有关详细信息,请参阅this question

答案 2 :(得分:0)

简而言之,您应该使用Dispatcher.Invoke方法来更新UI元素。