2010-08-20 3 views
6

Является ли рабочий рабочий потоком? Когда я должен его использовать?Является ли рабочий рабочий потоком? (C#)

+0

Я неправильно понял сейчас? Я видел, что вы спрашиваете: «Как мне его использовать», но теперь он становится «Когда я должен его использовать»? –

+0

все нормально, сэр. Спасибо – yonan2236

ответ

13

Да, это в основном как нить, но с дополнительными функциями (события, чтобы уведомить вас о прогрессе и когда он закончится) ,

Вы должны использовать его каждый раз, когда вам нужно выполнить что-то, что может занять некоторое время (например, вычисление, чтение и запись файлов или баз данных, веб-запросы и т. Д.), И вы не хотите, чтобы графический интерфейс выглядел невосприимчивым, пока он :

Класс BackgroundWorker позволяет запускать операцию в отдельном выделенном потоке. Длительные операции, такие как загрузки и транзакции базы данных, могут привести к тому, что пользовательский интерфейс (UI) выглядит так, как будто он перестает отвечать на запросы во время работы. Когда вам нужен гибкий пользовательский интерфейс, и вы столкнулись с большими задержками, связанными с такими операциями, класс BackgroundWorker обеспечивает удобное решение.

Read How to: Run an Operation in the Background для введения.

+0

спасибо sir (10x) .. :) – yonan2236

4

Простой пример:

static void Main(string[] args) 
{ 
    BackgroundWorker worker = new BackgroundWorker(); 
    //DoWork is a delegate, where you can add tasks 
    worker.DoWork += (sender, e) => 
     { 
      //blabla 
     }; 
    worker.DoWork += (sender, e) => 
     { 
      //blabla 
     }; 
    worker.RunWorkerCompleted += (sender, e) => 
     { 
      var IfYouWantTheResult = e.Result; 
      //maybe notify others here 
     }; 
    worker.RunWorkerAsync(); 
    //you can cancel the worker/report its progress by its methods. 
} 

Для получения более подробной информации, проверьте here

1

Фоновый работник - это в основном поток с добавлением, что он перезвонит по завершении, и этот обратный вызов будет в контексте U.I. , чтобы вы могли обновить U.I. по завершении.

Если вам нужен этот обратный вызов после его завершения в контексте U.I. thread - используйте его. В противном случае вы должны просто использовать обычный поток.

0

вот пример кода приложения, который отображает прогрессную панель при загрузке sth. с использованием фона рабочего

http://devtoolshed.com/content/c-download-file-progress-bar

и вот краткий учебник о фоне рабочего

http://www.dotnetperls.com/backgroundworker

я предлагаю вам использовать его, когда у вас есть много времени операции (загрузка файла и т.д.), и вы хотите, чтобы пользовательский интерфейс был активным. это полезная функция, если вы хотите показать прогресс на интерфейсе, например, показывать процент на метке или использовать панель прогресса.

Я особенно использую его с контроллером progressbar.

Смежные вопросы