3
我正在從UI線程和BackgroundWorker
線程創建webrequest。來自BackgroundWorker的BeginGetResponse
IAsyncResult result = request.BeginGetResponse (o => {
callCallback (o);
}, state);
....
private void callCallback (IAsyncResult o)
{
RequestStateGen state = (RequestStateGen)o.AsyncState;
state.context.Post (_ => {
onGetCustomListObject (o);
}, null);
}
當我打電話從UI該代碼線程它工作正常。當從BackgroundWorker
線程調用時,它會在BeginGetResponse上凍結。
UI仍然響應。有什麼想法嗎?
編輯:我想我從後臺線程調用時實際上不需要UI上下文。而且我認爲注入一個總是有效的ui上下文會非常困難。這是我現在的代碼:
private void callCallback (IAsyncResult o)
{
RequestStateGen state = (RequestStateGen)o.AsyncState;
if (!state.OnBgThread)
{
state.context.Post (_ => {
onGetCustomListObject (o);
}, null);
}
else
{
onGetCustomListObject (o);
}
}
}
我發現從BackgroundWorker調用時,我不需要用於回調的UI上下文。注入UI上下文也很困難。但是和以前一樣的問題。即使我刪除UI上下文,也會在從BackgroundWorker調用BeginGetResponse時凍結。看到我更新的答案。 – Sunkas 2013-03-07 09:43:24
問題解決。我沒有正確設置OnBgThread變量。 – Sunkas 2013-03-08 08:52:18
@Sunkas好聽,我不確定你所做的改變可能會出現什麼問題。 – Servy 2013-03-08 14:21:15