Использование диспетчера? - PullRequest
0 голосов
/ 27 декабря 2011

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

Например,

this.Dispatcher.BeginInvoke(delegate()
{
    MessageBoxResult result = MessageBox.Show("Are you sure to do this?", MessageBoxButton.OKCancel);
    if (result == MessageBoxResult.OK)
    {
            busyIndicator.Visibility = Visibility.Visible;
            int add = 3 +4;
            string str = "some string";
            this.CallofSomeFunction(arguments);
            this.CallofAnOtherFunction(arguments);
    }
});

В этом примереокно сообщения нуждается в диспетчере.Первая вызванная функция не нуждается в диспетчеризации, а во втором, втором окне сообщения необходим диспетчер.

Для всего этого я поместил весь код в один диспетчер .Этот подход хорошо ???или мне использовать диспетчера там, где это необходимо ??

Если конечный результат помещается в пользовательский интерфейс.Тогда я должен делать все в диспетчере (получение результата + отображение в пользовательском интерфейсе) или должен только отображать результат в пользовательском интерфейсе в диспетчере.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Обычно рекомендуется использовать Dispatcher только для тех задач, которые связаны с пользовательским интерфейсом. Если есть что-то, что может быть запущено без потока пользовательского интерфейса, тогда зачем поддерживать поток пользовательского интерфейса для этого?

Если конечный результат помещается в пользовательский интерфейс. Тогда я должен делать все в диспетчере (получение результата + отображение в пользовательском интерфейсе) или должен только отображать результат в пользовательском интерфейсе в диспетчере.

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

.

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

1 голос
/ 27 декабря 2011

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

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