BackgroundWorker и потоки

Есть несколько способов:

import { not, equal } from '@ember/object/computed';

// ...

isPizza: equal('controllers.application.currentRouteName', 'pizza'),
isNotPizza: not('isPizza'),

или вы можете сделать неравное, выполнив:

import { not, equal } from '@ember/object/computed';

isNotPizza: not(equal('controllers.application.currentRouteName', 'pizza')),

Возможно, вам понадобится использовать это: https: //github.com/kellyselden/ember-macro-helpers не помню, поддерживается ли это изначально.

Если вы оказались на угасающей канарейке (используя нативные классы и декораторы), вы можете сделать:

@not
@equal('controllers.application.currentRouteName', 'pizza')
isNotPizza;

8
задан Anand Shah 14 April 2009 в 14:19
поделиться

6 ответов

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

3
ответ дан 5 December 2019 в 06:10
поделиться

Если под «потоками» вы подразумеваете явное использование класса System.Threading.Thread для создания, настройки и запуска вашего Если вы работаете с собственными потоками, то ответ заключается в том, что выполнение этой задачи - это больше работы с вашей стороны, включает в себя больше циклов ЦП, чем просто извлечение потока из пула потоков (что и делают другие методы), но это дает вам большую гибкость, так как позволяет указать приоритет потока и ряд других характеристик, которые вам не позволяют использование потоков пула потоков.

Подход «Пул потоков» более уместен, когда требуемое количество потоков неизвестно во время разработки. Изначально пул содержит небольшое количество потоков, «готовых» к вам для их вызова. Он может динамически создавать новые потоки по запросу, и он управляет созданием, координацией, и удаление неиспользованных тем для вас. Существует три механизма, которые вы можете использовать для доступа и использования потоков из пула.

  1. Использование Delegate.BeginInvoke () (наиболее распространенный метод)
  2. Использование таймеров (несколько вариантов)
  3. System.Threading.ThreadPool предоставляет несколько другие функции (класс BackGroundWorker, QueueUserWorkItem () и т. д.).
12
ответ дан 5 December 2019 в 06:10
поделиться

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

Вы избегаете много проблем с пользовательским интерфейсом и фоновыми работниками.

4
ответ дан 5 December 2019 в 06:10
поделиться

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

1
ответ дан 5 December 2019 в 06:10
поделиться

Посмотрите этот великолепный обзор потоков :

[BackgroundWorker] предоставляет следующие функции:

  • Флаг «отмены» для сигнализации работнику об окончании без использования прерывания

  • Стандартный протокол для сообщения о ходе выполнения, завершении и отмене

  • Реализация IComponent, позволяющая он будет размещен в Visual Studio Designer Обработка исключений в рабочем потоке

  • Возможность обновлять элементы управления Windows Forms и WPF в ответ на прогресс или завершение рабочего процесса.

Последние две функции особенно полезны - это означает, что вам не нужно включать try / catch заблокировать в рабочем методе и может обновлять элементы управления Windows Forms и WPF без необходимости вызывать Control.Invoke.

6
ответ дан 5 December 2019 в 06:10
поделиться

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

BackgroundWorker обеспечивает удобство с событием ProgressChanged, но не

1
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: