У меня есть следующий код в очень простом приложении Silverlight 4.
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var result = string.Empty;
var mutex = new AutoResetEvent(false);
var wc = new WebClient();
wc.DownloadStringCompleted += (s, args) => {
result = args.Result;
mutex.Set();
};
wc.DownloadStringAsync(new Uri("http://localhost/SilverlightApplication2.Web/SilverlightApplication2TestPage.aspx", UriKind.Absolute));
mutex.WaitOne();
MessageBox.Show(result);
}
По любой причине mutex.Set () никогда не вызывается, поэтому mutex.WaitOne () просто блокируется. Что мне не хватает? Я также пробовал ManualResetEvent.
Спасибо,
Randall
Update1:
Если я сделаю следующее, это сработает, как и ожидалось.
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem(GetIt);
}
private void GetIt(object state)
{
var result = string.Empty;
var mutex = new AutoResetEvent(false);
var wc = new WebClient();
wc.DownloadStringCompleted += (s, args) => {
result = args.Result;
mutex.Set();
};
wc.DownloadStringAsync(new Uri("http://localhost/SilverlightApplication2.Web/SilverlightApplication2TestPage.aspx", UriKind.Absolute));
mutex.WaitOne();
Dispatcher.BeginInvoke(() => MessageBox.Show(result));
}
Похоже, существует проблема с потоком пользовательского интерфейса, которая приводит к тому, что обратный вызов не выполняется.