4

メソッドの実行が完了して別のスレッドで再起動するのに 2 秒以上かかる場合は、メソッドの実行をキャンセルする必要があります。

それで、方法/コールバックメカニズム/ハックはありますか?メソッドに2秒の制限時間を超えたことを通知させることができますか?

4

3 に答える 3

4

C# でタイムアウトのあるネットワーク ドライブが存在するかどうかを確認します。
-時間

非同期パターン:

public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)   
   {
       var iar = F.BeginInvoke(null, new object());
       if (iar.AsyncWaitHandle.WaitOne(Timeout))
       {
           Completed = true;
           return F.EndInvoke(iar);
       }
         F.EndInvoke(iar); //not calling EndInvoke will result in a memory leak
         Completed = false;
       return default(T);
   } 
于 2011-02-17T07:37:28.227 に答える
2

System.Threading.Timer を 2 秒で作成し、別のスレッドでメソッドを実行して、そこからのコールバックを待機する必要があります。タイマーが実行される前にメソッドが完了する場合は、タイマーを破棄する必要があります。それ以外の場合は、メソッドが実行されているスレッドを中止する必要があります。たとえば、これは非常に簡単です

using (new Timer(BreakFunction, true, TimeSpan.FromMinutes(2), Timeout.Infinite))
                    {
                        //TODO:here you should create another thread that will run your method
                    }

BreakFunction では、メソッドを実行するスレッドを中止する必要があります

于 2011-02-17T05:54:39.117 に答える
1

見つけられると良いですね。私も探してきました。

私が通常行うことは、メソッドを別Threadの で開始しTimer、この場合は 2 秒で開始することです。初めてイベントを発生させるときは、次のようにします。

if (a.IsAlive)
{
   a.Abort();
}

2 つの重要なこと:

  • 宣言されたThreadものは、タイマーを処理するメソッドによって表示される必要があります
  • を呼び出すAbort()ThreadAbortExceptionが発生するため、メソッド内で適切に処理する必要があります。
于 2011-02-17T06:03:25.487 に答える