Multithreading Silverlight 4 Ria服务和多线程
我有一个运行很长的查询,它需要太长时间才能保持客户端的连接。我想调用我的DomainService,创建一个新的工作线程,然后从服务返回,这样我的客户端就可以开始轮询,看看长时间运行的查询是否完成 我遇到的问题是,由于我的调用线程正在立即退出,因此当我的工作线程尝试访问任何实体时,我会抛出异常,因为ObjectContext在原始线程结束时被释放 以下是我如何从Silverlight客户端创建新上下文和调用:Multithreading Silverlight 4 Ria服务和多线程,multithreading,wcf-ria-services,objectcontext,Multithreading,Wcf Ria Services,Objectcontext,我有一个运行很长的查询,它需要太长时间才能保持客户端的连接。我想调用我的DomainService,创建一个新的工作线程,然后从服务返回,这样我的客户端就可以开始轮询,看看长时间运行的查询是否完成 我遇到的问题是,由于我的调用线程正在立即退出,因此当我的工作线程尝试访问任何实体时,我会抛出异常,因为ObjectContext在原始线程结束时被释放 以下是我如何从Silverlight客户端创建新上下文和调用: MyDomainContext context = new MyDomainConte
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已经处理的异常
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);
}
}
private void WorkerProc(对象o)
{
HashSet excludeList=新HashSet();
var query1=来自this.ObjectContext.Documents中的文档
在此.ObjectContext.AppliedGlobalFilters中加入筛选器
.其中(f=>f.FilterId==1)
在doc.FileExtension上等于filters.FilterValue
选择doc.FileId;
foreach(query1中的long fileId)//这里发生异常,因为
{//对象上下文已被释放。
excludeList.Add(fileId);
}
}
我怎样才能防止这种情况发生?有没有办法为新线程创建新上下文?我真的被这件事难住了
谢谢。因为您正在使用WCF RIA。我必须假设您正在实现两个部分:
- wcfweb服务
- 使用WCF服务的Silverlight客户端
赫伯重复-我能说什么,我绝望了!除非这是实质性的不同,你应该编辑你原来的问题,而不是张贴一个新的。看-