System.Threading.Timer回调到主线程

时间:2014-07-11 11:30:35

标签: c# .net windows-phone-8

这是我的方案:我正在无线网络上的设备之间进行通信。当两个设备正在通信但其连接意外丢失时,消息会自动缓冲,直到它们能够再次相互连接为止。这意味着我需要定期(每隔X秒)更新当前网络上可用的所有人的列表(因为许多设备连接到许多其他设备)。当发现某些客户端之前可能已被强制断开连接时,这意味着可以为该客户端缓冲一些消息。

每隔X秒刷新网络上的设备列表似乎是System.Threading.Timer的工作。问题是,当这个计时器线程尝试发送消息时,我担心数据争用情况,但主线程也可能尝试发送剩余的消息(出于不同的原因)。

所以我想知道 - 我可以在System.Threading.Timer线程内的主线程上引发一个事件吗?或者,如果需要在Windows Phone 8和Windows 8(商店应用程序)上运行任何方法,我将如何处理此问题。

1 个答案:

答案 0 :(得分:1)

您可以使用Dispatcher.Invoke

请参阅http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    // Place delegate on the Dispatcher. 
    this.Dispatcher.Invoke(DispatcherPriority.Normal,
        new TimerDispatcherDelegate(TimerWorkItem));
}

或者,正如@HansPassant建议的那样,请考虑使用DispatcherTimer