Асинхронность, выполнение простых, но трудоемких действий - PullRequest
2 голосов
/ 06 марта 2011

Я создаю приложение WPF, которое должно сканировать папки и файлы, и, как вы знаете, даже если и не так много, для перебора многих папок требуется некоторое время. Очевидно, что вы не хотите заставлять пользователя приложения ждать, не имея возможности выполнять какие-либо другие действия (или просто так, чтобы пользовательский интерфейс не зависал). С чего начать, чтобы научиться выполнять сканирование папок асинхронно? Если возможно простая ссылка!

Хорошего дня!

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Самый простой вариант - использовать BackgroundWorker .Это автоматически позволит вам перенести вашу «работу» в фоновый режим и сообщить о ходе и завершении потока в поток WPF без синхронизации вручную с помощью диспетчера.

Другим вариантом будет использование TPL через задачу спродолжения.Например, когда вы запускаете свой метод, вы можете сделать:

// Disable your UI...

// Start your "work"
var task = Task.Factory.StartNew( () =>
{
    // Do your processing here...
});

task.ContinueWith( t =>
{
    // Report results and re-enable UI here...

}, TaskScheduler.FromCurrentSynchronizationContext());
2 голосов
/ 06 марта 2011

Вероятно, страница MSDN о функциях многопоточности .NET framekwork - это хорошее место для начала .

1 голос
/ 06 марта 2011

Вот хорошая статья , в которой показано использование BackgroundWorker , включая отправку вызовов пользовательского интерфейса обратно в поток пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...