2015-10-21 67 views
0

在通用(Windows 10)應用程序中,我想要在發送WaitHandle時發出回調(在我的情況下爲ManualResetEvent)。我如何實現這一目標?通常我會用ThreadPool.RegisterWaitForSingleObject(),但唉,ThreadPool走了渡渡鳥的路。如何從通用應用程序的ManualResetEvent中獲取回調?

任何其他(有效的 - 非線程阻塞)的選擇?

+0

你確定'ThreadPool.RegisterWaitForSingleObject'不是線程阻塞嗎? MSDN說(https://msdn.microsoft.com/en-us/library/w9f75h7a(v=vs.110).aspx):'等待操作是由線程池中的線程執行的' –

+0

另外,是使用'WaitHandle'的一個要求(因爲由外部API提供),或者你可以用另一個對象替換它嗎?因爲許多同步情況可以通過使用async/await,任務延續或簡單的回調來處理...... –

+0

使用調用WaitOne()的任務。 –

回答

1

.Net for UWP中的ThreadPool類不具有RegisterWaitForSingleObject方法。

正如Hans所建議的,您可以啓動一個新線程來等待信號解決。

private static ManualResetEvent mre = new ManualResetEvent(false); 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     Task.Run(() => { 
      mre.WaitOne(); 

      Debug.WriteLine("do sth else"); 
     }); 
    } 



    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     mre.Set(); 
    } 
+0

謝謝 - 我特意要求在我的問題中使用非線程阻塞解決方案。 :) 呃,好吧。猜猜我們必須等到它重新添加。 –

相關問題