-1

我想把这个放在下面的事件中

skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus);

private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
}

原因是我可以在skype_MessageStatus不让主线程进入睡眠状态的情况下调用线程睡眠。

我真的不知道更好的方法来问这个问题,所以希望这已经足够好了。

4

2 回答 2

2

使用 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)
{
    ...
}

最佳实践也是不使用 aThread.Sleep而是设置一个计时器。有关 .NET 中的各种计时器,请参阅http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

于 2013-10-01T01:06:21.130 回答
2

而不是使用 Thread.Sleep() 考虑使用Task.Delay() 方法来安排延迟回调:

 skype.MessageStatus += (sender, args)=> 
      Task.Delay(TimeSpan.FromSeconds(10)).ContinueWith((t)=> CallAfterDelay());
于 2013-10-01T01:12:12.140 回答