클라이언트 연결을 유지하는 데 너무 오래 걸리는 매우 긴 실행 쿼리가 있습니다. 내 DomainService에 대한 호출을 만들고 새 작업자 스레드를 만든 다음 서비스에서 반환하여 내 클라이언트가 장기 실행 쿼리가 완료되었는지 확인하기 위해 폴링을 시작할 수 있도록하려고합니다.Silverlight 4 Ria 서비스 및 다중 스레드
문제는 내 호출 스레드가 즉시 종료 되었기 때문에 원래 스레드가 종료 될 때 ObjectContext가 삭제 된 이후에 내 작업자가 모든 엔티티에 액세스하려고 할 때 예외가 발생한다는 것입니다.
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
내가 뭐라 말할 수 있니, 나는 필사적이다! – Scott
이것이 실질적으로 다른 경우가 아니면 새로운 질문을 게시하는 대신 원래 질문을 편집해야합니다. 참조 - http://stackoverflow.com/questions/4869346/polling-pattern-for-silverlight-4-wcf-ria-services – ChrisF