这是我的方案:我正在无线网络上的设备之间进行通信。当两个设备正在通信但其连接意外丢失时,消息会自动缓冲,直到它们能够再次相互连接为止。这意味着我需要定期(每隔X秒)更新当前网络上可用的所有人的列表(因为许多设备连接到许多其他设备)。当发现某些客户端之前可能已被强制断开连接时,这意味着可以为该客户端缓冲一些消息。
每隔X秒刷新网络上的设备列表似乎是System.Threading.Timer
的工作。问题是,当这个计时器线程尝试发送消息时,我担心数据争用情况,但主线程也可能尝试发送剩余的消息(出于不同的原因)。
所以我想知道 - 我可以在System.Threading.Timer
线程内的主线程上引发一个事件吗?或者,如果需要在Windows Phone 8和Windows 8(商店应用程序)上运行任何方法,我将如何处理此问题。
答案 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
。