Извините, что задаю такой простой вопрос, но у меня, похоже, зависает мозг на этом! Я вызываю объект COM (ATL) из моего проекта WPF. Метод COM может занять много времени. Я думал, что попробую назвать это асинхронно. У меня есть несколько демонстрационных строк, которые показывают проблему.
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
//DoSomeWork();
AsyncDoWork caller = new AsyncDoWork(DoSomeWork);
IAsyncResult result = caller.BeginInvoke(null, null);
}
private delegate void AsyncDoWork();
private void DoSomeWork()
{
_Server.DoWork();
}
Метод ATL DoWork очень увлекателен. Это:
STDMETHODIMP CSimpleObject::DoWork(void)
{
Sleep(5000);
return S_OK;
}
Я ожидал, что этот путь приведет к тому, что флажок будет установлен сразу (вместо 5 секунд) и я смогу перемещать графический интерфейс WPF по экрану. Я не могу - в течение 5 секунд.
Что я делаю не так? Я уверен, что это довольно просто. Подпись делегата неверна?
Спасибо.