0

System.Threading.WaitHandle.WaitOne()標準の .NET 実装で利用可能なタイムアウト パラメータをオーバーロードしていない理由: http://msdn.microsoft.com/en-us/library/cc189907(v=vs.110).aspx

スレッドのスリープ中に、スレッドがメイン UI スレッドから停止するように要求されたときに、スレッドの作業に非常に役立ちます。それを実装する他の方法はありますか?

例:

public void StartBatteryAnimation()
{ 
  whStopThread = new ManualResetEvent(false);

  batteryAnimationThread = new Thread(new ThreadStart(BatteryAnimation_Callback));
  batteryAnimationThread.Start();
}

public void StopBatteryAnimation()
{ 
  whStopThread.Set();      

  batteryAnimationThread.Join();

  batteryAnimationThread = null;
  whStopThread.Dispose();
  whStopThread = null;
}

public void BatteryAnimation_Callback()
{ 
    bool exitResult = false;

    while (true)
    {
      // Do some stuff
      exitResult = whStopThread.WaitOne(WAIT_INTERVALL);
      if (exitResult) break;
    }
}

(1000回目!!) お返事ありがとうございます。

したがって、私のカスタム実装WaitHandle.WaitOne(int Timeout)は次のとおりです。

private Thread    batteryAnimationThread     = null;
private Semaphore batteryAnimationSemaphore  = null;

public void StartBatteryAnimation()
{ 
  batteryAnimationSemaphore = new Semaphore(1);
  batteryAnimationSemaphore.Acquire();

  batteryAnimationThread = new Thread(new ThreadStart(BatteryAnimation_Callback));
  batteryAnimationThread.Start();
}

public void StopBatteryAnimation()
{ 
  batteryAnimationSemaphore.Release();

  batteryAnimationThread.Join();

  batteryAnimationThread    = null;
  batteryAnimationSemaphore = null;
}

public void BatteryAnimation_Callback()
{ 
  bool stopThread = false;

  try
  {
    while (true)
    {
      // Do some stuff..

      stopThread = batteryAnimationSemaphore.TryAcquire(1, BATTERY_ANIMATION_INTERVALL, Java.Util.Concurrent.TimeUnit.MILLISECONDS);

      if (stopThread) break;
  }
  catch (Exception ex)
  { 
  }

  batteryAnimationSemaphore.Release();
}

これは____に行く道であっていますか?

ありがとう

4

1 に答える 1

0

これはまだ実装されていません。代わりに使用できますsemaphore.tryAcquire

背景: dot42 はその設計上、Android API 全体をサポートします (C# クラスはプロキシであり、android.jar から生成されます)。ただし、.NET クラスは Android/Java API の上に手作りされているため、.NET API の一部しかサポートされていません。

関連する質問: .NET の ManualResetEvent と WaitHandle に相当する Java

アップデート

Apache License 2.0 の下でAPIをリリースしたので、誰でも今すぐ貢献できます。問題も記録しました。

于 2014-01-27T11:06:01.630 に答える