2014-01-27 61 views
0

爲什麼System.Threading.WaitHandle.WaitOne()沒有超載的標準.NET實現可用的超時參數:http://msdn.microsoft.com/en-us/library/cc189907(v=vs.110).aspxWaitOne()超時參數丟失?

時,線程睡眠時,線程被要求從主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(); 
} 

這是對正確的方法是什麼?

謝謝

回答

0

這一個還沒有實施。您可以改用semaphore.tryAcquire。背景:由於其設計,dot42支持整個Android API(C#類是代理,並從android.jar生成)。但是僅支持.NET API的一部分,因爲.NET類是在Android/Java API之上手工製作的。

相關問題:Java Equivalent of .NET's ManualResetEvent and WaitHandle

UPDATE

我們released the API下Apache許可證2.0讓任何人都可以立即捐款。我也登錄了issue

+0

更新我的問題 – minimega