-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));

または、ThreadPool を使用して 2 つ目のメソッドを呼び出す 2 つの skype_MessageStatus メソッドを作成することもできます。

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を参照してください。

于 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 に答える