I’m trying to use a ManualResetEvent to block until a callback is executed, but the callback is never reached, even when I try to run the callback on another thread.
waitHandle = new ManualResetEvent(false);
DataServiceQueryer<MyEntity> dataServiceQueryer = new DataServiceQueryer<MyEntity>(dsQuery.Expression);
ThreadPool.QueueUserWorkItem(new WaitCallback(stateInfo =>
{
dataServiceQueryer.ExecuteQuery();
}));
// waits here forever
waitHandle.WaitOne();
public class DataServiceQueryer<T>
{
//field, properties
public void ExecuteQuery()
{
// this block is definitely executed
_asyncResult = _query.BeginExecute(new AsyncCallback(c =>
{
// this is never reached
QueryOperationResponse<T> result = _query.EndExecute(c) as QueryOperationResponse<T>;
MainPage.ListRecords = new ObservableCollection<T>(result) as ObservableCollectionEx<MyEntity>;
MainPage.waitHandle.Set();
}), _query);
// neither is this!
var test = _asyncResult.AsyncWaitHandle.WaitOne(0);
}
}
Any suggestions? I am most confounded as to why the _asycResult assignment never seems to take place. I’m using Silverlight 4 with EF4 and the devart Oracle dotConnect provider.
In silverlight and on the ui thread, that is expected behavior (hung app). I cannot seem to find more official documentation, though I could swear I remember seeing it in the past…
I do not remember the exact details but I’m fairly certain directly blocking the ui thread causes everything to stop functioning. I seem to remember that the UI thread handles network IO.
Whatever you want to happen after the WaitOne call needs to be moved to a callback.
Although, it is not your exact situation, there is related info in this link. It explains that blocking the UI thread prevents the web service call from going out since it also blocks the UI messaging queue. I realize that your call is going out from the threadpool. I still think that blocking the ui thread will interfere, but I can’t locate the documentation concretely explaining why.
http://www.codeproject.com/Articles/31018/Synchronous-Web-Service-Calls-with-Silverlight-Dis (best I can find at the moment, I’ll update when/if I found the article I’m looking for).