我有一个很长的运行查询,需要很长的时间来保持我的客户端连接。我想调用我的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