WPF: асинхронная работа в окне закрываетсяC#

Место общения программистов C#
Ответить
Anonymous
 WPF: асинхронная работа в окне закрывается

Сообщение Anonymous »

Мне нужно выполнить асинхронную операцию, когда окно закрыто (в основном, чтобы сохранить все мои данные). Проблема в том, что программа и поток пользовательского интерфейса умирают слишком рано, и задача никогда не выполняется. < /P>
Это пример кода: < /p>
public partial class MainWindow : Window
{
public MainWindow()
{
Closed += MainWindow_Closed;
_items = new(Enumerable.Range(0,10));
}

private ObservableCollection _items;

private async void MainWindow_Closed(object? sender, EventArgs e)
{
await LongTask();
}

private async Task LongTask()
{
await Task.Run(() =>
{
Trace.WriteLine("LongTask Start");
Application.Current.Dispatcher.BeginInvoke(() =>
{
// do some action in the UI thread
_items.Clear();
Trace.WriteLine("Cleared elements");
});

Thread.Sleep(5000);
Trace.WriteLine("LongTask End");
});
}
}
< /code>
и выход консоли никогда не печатает «очищенные элементы» и «Longtask End».
Я также поместил действие в задачу Async, которая нуждается в потоке пользовательского интерфейса, чтобы завершить операцию , который необходим в моем варианте использования. (Таким образом, нельзя использовать longtask (). Getawaiter (). GetResult () в основном потоке, поскольку это приведет к тупику).
Спасибо за помощь !!

Подробнее здесь: https://stackoverflow.com/questions/794 ... ndow-close
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»