在通用(Windows 10)應用程序中,我想要在發送WaitHandle
時發出回調(在我的情況下爲ManualResetEvent
)。我如何實現這一目標?通常我會用ThreadPool.RegisterWaitForSingleObject()
,但唉,ThreadPool
走了渡渡鳥的路。如何從通用應用程序的ManualResetEvent中獲取回調?
任何其他(有效的 - 非線程阻塞)的選擇?
在通用(Windows 10)應用程序中,我想要在發送WaitHandle
時發出回調(在我的情況下爲ManualResetEvent
)。我如何實現這一目標?通常我會用ThreadPool.RegisterWaitForSingleObject()
,但唉,ThreadPool
走了渡渡鳥的路。如何從通用應用程序的ManualResetEvent中獲取回調?
任何其他(有效的 - 非線程阻塞)的選擇?
.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();
}
謝謝 - 我特意要求在我的問題中使用非線程阻塞解決方案。 :) 呃,好吧。猜猜我們必須等到它重新添加。 –
你確定'ThreadPool.RegisterWaitForSingleObject'不是線程阻塞嗎? MSDN說(https://msdn.microsoft.com/en-us/library/w9f75h7a(v=vs.110).aspx):'等待操作是由線程池中的線程執行的' –
另外,是使用'WaitHandle'的一個要求(因爲由外部API提供),或者你可以用另一個對象替換它嗎?因爲許多同步情況可以通過使用async/await,任務延續或簡單的回調來處理...... –
使用調用WaitOne()的任務。 –