Не можете ли вы обернуть любой не асинхронный метод в асинхронный вызов с использованием асинхронных делегатов? Моя ссылка это ссылка .
Хорошо. Итак, вы сделали свой асинхронный вызов как-то так ...
private delegate <returnType> YouTubeAPI( <args> )
private YouTubeAPI func;
private IAsyncResult ticket;
void YouTubeSearchFunc( string what )
{
func = <whatever the you tube call is>
ticket = func.BeginInvoke( <args needed> );
// WE MUST do this in order to return flow of control to program
return;
}
// later we need to check if the ticket is done and then get it
if ( ticket.IsComplete == true )
// get it
else
// continue on like normal
Причина, по которой мы не можем сразу получить значение, заключается в том, что это заблокирует программу. Это именно то, что мы не хотим делать. Таким образом, вместо этого мы должны структурировать программу таким образом, чтобы проверить, выполняется ли она при отдельном обновлении. Это позволяет Win-формам или GTK работать так, чтобы это не выглядело как зависание. К сожалению, это боль в заднице. Что вы, вероятно, хотите сделать, это просто использовать фоновый работник. Прочтите эту часть ЗДЕСЬ и посмотрите, не поможет ли это вам больше, потому что у BackgroundWorkers могут быть обратные вызовы. Затем все, что вам нужно сделать, это настроить фонового работника, а затем подключить функцию обновления к завершенному событию.