线程事件处理程序
本文关键字:程序 事件处理 线程 | 更新日期: 2023-09-27 18:33:33
我想在下面的事件中线程化
skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus);
private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
}
原因是我可以在skype_MessageStatus
中调用线程睡眠,而无需将主线程置于睡眠状态。
我真的不知道更好的方法来问这个问题,所以希望这已经足够好了。
使用 Lambda 将其排队到线程池。
skype.MessageStatus += m => ThreadPool.QueueUserWorkItem(_ => skype_MessageStatus(m));
或者,您可以创建两个skype_MessageStatus方法,一个使用 ThreadPool 调用第二个方法:
skype_MessageStatus += skypeMessageStatus;
private void skype_MessageStatus(m)
{
ThreadPool.QueueUserWorkItem(skype_MessageStatusImpl, m);
}
private void skype_MessageStatusImpl(object m)
{
...
}
此外,最佳做法是不使用Thread.Sleep
而是设置计时器。 有关 .NET 中的各种计时器,请参阅 http://msdn.microsoft.com/en-us/magazine/cc164015.aspx。
与其使用 Thread.Sleep(),不如使用 Task.Delay() 方法来调度延迟回调:
skype.MessageStatus += (sender, args)=>
Task.Delay(TimeSpan.FromSeconds(10)).ContinueWith((t)=> CallAfterDelay());