Dispatcher类的用法

时间:2013-12-04 06:39:06

标签: c# .net wpf

我的代码是,

Ping ping = new Ping();
ping.PingCompleted += ping_PingCompleted;
ping.SendAsync(strTerminalName, 60, Encoding.ASCII.GetBytes("sfk"));

 private void ping_PingCompleted(object sender, PingCompletedEventArgs e)
 {
    Terminal.ChangeTerminalStatus(this.imgCurrent, TerminalStatus.UserOFF);
 }

终端有静态方法ChangeTerminalStatus,我在ping_PingCompleted中调用。

我得到的错误: -

The calling thread cannot access this object because a different thread owns it WPF.

因为我试图在该statis方法中更改窗口的UI属性。

我搜索并获得使用 Dispatcher.BeginInvoke 方法的解决方案。

当我尝试在我有ping的类Dispatcher.BeginInvoke中使用它时 它抛出错误说

Error   2   An object reference is required for the non-static field, method, or property 'System.Windows.Threading.Dispatcher.BeginInvoke(System.Delegate, params object[])'   D:\Net Projects\mercurial\icafemanager\ICMBusiness\Terminal.cs  124 17  ICM

帮助我解决这个问题。

1 个答案:

答案 0 :(得分:4)

BeginInvoke不是Dispatcher类的静态方法。您需要一个调度程序实例来调用它。在您的教程中,您调用它的类可能有一个名为dispatcher的成员,因此可以将其称为

this.Dispatcher.BeginInvoke(...);

如果您需要当前的Dispatcher,则有一个静态属性CurrentDispatcher来获取它:

Dispatcher.CurrentDispatcher.BeginInvoke(...);

如果您的类已经关联了调度程序对象,则使用它可能会更快。