Я пытаюсь использовать ниже API Dispatcher Invoke (.Net 4.6), так как я хочу вернуться обратно, если мой делегат требует времени.Проблема в том, что Dispatcher.Invoke не возвращается до тех пор, пока не будет завершен делегат
Пример кода:
public void PopulateList()
{
List<string> tempList = null;
System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new TimeSpan(0,0,10), (Action)delegate ()
{
System.Threading.Thread.Sleep(20000);//Sleep for 20 secs
tempList = new List<string>();
});
if (tempList == null)
{
//do something
}
}
TimeSpan установлен на 10 секунд, поэтому я считаю, что Dispatcher должен появиться через 10 секунд сtempList все еще нулевой.Но Thread хорошо спит в течение 20 секунд, а tempList не равен нулю.
Я понимаю, что Invoke - это синхронная операция, и она не будет возвращаться, пока работа не будет выполнена, поэтому я добавил TimeSpan, чтобы через некоторое время возвращаться, даже если работане закончен.
Что здесь не так?
Спасибо,
RDV