不太清楚是怎麼回事 -TaskScheduler.FromCurrentSynchronizationContext例外,從輔助線程調用時
這段代碼導致,因爲它是第一個從主線程調用(在VS任務視圖覈實)問題和調度任務,但是當在UpdateSearchCache
中設置斷點時,我們現在處於工作線程中 - 不再是主線程!
從那裏調用的後續UI代碼塊在工作線程上執行時失敗。
是不是指定調度程序的整個點?我錯過了什麼?
啓動我們的應用程序時會調用此代碼。它從我們的PRISM應用程序的引導程序中調用,並在MainThread上運行。
當任務啓動時,SynchronizationContext.Current
不爲null。
var currentScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var ctx = SynchronizationContext.Current;
if (ctx == null)
throw new NullReferenceException();
Task.Factory
.StartNew(
() =>
SearchHelper.CacheSearchResults(_service.GetData())
.ContinueWith(result => UpdateCache(result.Result), currentScheduler);
您的代碼片段的第一行是否在主UI線程上執行?如果是這樣,你是否在'Form.Load'等等,這是在'Application.Run'核心循環? – Noseratio
是的,這是主線程。 – cacau
在保存之前,執行以下操作:'Debug.Assert(SynchronizationContext.Current!= null)'。它通過了嗎? – Noseratio