我有一個很長的運行查詢,需要很長的時間來保持我的客戶端連接。我想調用我的DomainService,創建一個新的工作線程,然後從服務返回,這樣我的客戶端就可以開始輪詢以查看長時間運行的查詢是否完成。Silverlight 4 Ria服務和多線程
我遇到的問題是,因爲我的調用線程馬上退出,所以當我的工作人員試圖訪問任何實體時,我得到了異常,因爲在原始線程結束時ObjectContext被置位。
這是我如何創建新的環境,並從我的Silverlight客戶端調用:
MyDomainContext context = new MyDomainContext();
context.SearchAndStore(_myParm, SearchQuery,
p => {
if (p.HasError) { // Do some work and return to start
} // polling the server for completion...
}, null);
服務器上的進入方法:
[Invoke]
public int SearchAndStore(object parm)
{
Thread t = new Thread(new ParameterizedThreadStart(SearchThread));
t.Start(parms);
return 0;
// Once this method returns, I get ObjectContext already Disposed Exceptions
}
這裏是被稱爲與該WorkerProc方法新線程。只要我嘗試迭代我的query1對象,我就會得到ObjectContext已經Disposed異常。
private void WorkerProc(object o)
{
HashSet<long> excludeList = new HashSet<long>();
var query1 = from doc in this.ObjectContext.Documents
join filters in this.ObjectContext.AppliedGlobalFilters
.Where(f => f.FilterId == 1)
on doc.FileExtension equals filters.FilterValue
select doc.FileId;
foreach (long fileId in query1) // Here occurs the exception because the
{ // Object Context is already disposed of.
excludeList.Add(fileId);
}
}
我該如何防止這種情況發生?有沒有辦法爲新線程創建新的上下文?我真的被困在這一個。
謝謝。
複製 - http://stackoverflow.com/questions/4869346/polling-pattern-for-silverlight-4-wcf-ria-services/4879483 #4879483 – jweyrich 2011-02-02 20:28:05