返回true我的代碼如下:Dispatcher.CheckAccess從非託管工作者線程
public override void Touch()
{
if (System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess())
{
TouchBase();
}
else
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Send,
(Action) (() => TouchBase()));
}
}
而且我剛剛得到一個崩潰的if塊(而不是其他塊),因爲有一些事情必須在主線程上完成,調用堆棧清楚地表明這不是主線程,而是非託管IOCP線程。
所以我的問題是,CheckAccess()不工作時從非託管線程或什麼時調用?它真的可以被打破嗎?任何人都有什麼想法發生在這裏。順便說一下,這個問題很少發生,所以建議添加一些日誌記錄並不是那麼有用。
這有點奇怪嗎?你也可以嘗試使用分派器。 VerifyAccess()。這將拋出一個異常,如果沒有訪問和不返回一個布爾。 [驗證訪問](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.verifyaccess.aspx) – ryadavilli
不容易,它花了大約一個小時才能崩潰。事實上,不,我不能,如果你看看代碼,有時它會被主線程調用,其他的則不會。它需要繼續在這兩種情況下工作,我不想用try {} catch塊和東西來污染該代碼。 –
非常真實。沒有任何幫助。我對這個問題和解決方案很感興趣。 – ryadavilli