Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程事件处理程序_C#_Multithreading_Events - Fatal编程技术网

C# 线程事件处理程序

C# 线程事件处理程序,c#,multithreading,events,C#,Multithreading,Events,我想在下面介绍这个事件 skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus); private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status) { } 原因是我可以在skype_MessageStatus中调用线程睡眠,而无需将主线程置于睡眠状态 我真的不知道有什么更好的方法来问这个

我想在下面介绍这个事件

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方法,其中一个使用线程池调用第二个:

skype_MessageStatus += skypeMessageStatus;

private void skype_MessageStatus(m) 
{
    ThreadPool.QueueUserWorkItem(skype_MessageStatusImpl, m);
}                               

private void skype_MessageStatusImpl(object m)
{
    ...
}

最好的做法是不要使用线程睡眠,而是设置一个计时器。请参阅.NET中的各种定时器。

而不是使用线程。睡眠考虑使用以安排延迟回调:

 skype.MessageStatus += (sender, args)=> 
      Task.Delay(TimeSpan.FromSeconds(10)).ContinueWith((t)=> CallAfterDelay());

你使用线程睡眠做什么?这看起来像是X/Y问题。在一个状态改变的事件中,睡眠没有任何可能的用途。原因是什么?我在处理事件中的一些事情,我想睡觉。哈哈。原因是我们通常不喜欢帮助别人把糟糕的解决方案弄得更糟。但是你是对的,通过艰苦的方式学习东西有很多乐趣。这是一个机器人,如果机器人立即回复,它就达不到目的。现在明白了吗?英雄联盟