Использование C# MethodInvoker. Вызовите () для приложения для GUI …, действительно ли это хорошо?

Если вы внимательно прочитали страницу справки help("boxplot.stats"), в разделе возвращаемого значения сказано следующее. Мой акцент.

stats
вектор длиной 5, содержащий экстремум нижнего
усика, нижнего «шарнира», медианы, верхнего «шарнира» и [115 ]
крайность верхнего усика .

Затем, в том же разделе, снова мой акцент.

out
значения любых точек данных, которые находятся за пределами крайностей усов (if (do.out)).

Ваши данные имеют 4 балла. Экстремум верхнего усика , возвращенный в элементе списка $stats, равен 500.0, и это максимум ваших данных. Там нет ошибки.

26
задан Kent Boogaart 23 April 2009 в 15:49
поделиться

4 ответа

The method.Invoke() call executes the delegate on the current executing thread. Using the BeginInvoke(method) ensures that the delegate is called on the GUI thread.

This is the correct way of avoiding code duplication when the same method can be called both from the GUI thread and other threads.

21
ответ дан 28 November 2019 в 07:20
поделиться

Имейте в виду, что Control.InvokeRequired возвращает false, если вы находитесь в фоновом потоке, а Control.IsHandleCreated имеет значение false. Я бы защищал код с помощью Debug.Assert, который проверяет создание неуправляемого дескриптора.

5
ответ дан 28 November 2019 в 07:20
поделиться

Для WinForms вызов Control.Invoke (Delegate) отправляет сообщение в обработчик сообщений thead пользовательского интерфейса. Затем поток обрабатывает сообщение и вызывает делегата. После обработки Invoke прекращает блокировку, и вызывающий поток возобновляет выполнение вашего кода.

2
ответ дан 28 November 2019 в 07:20
поделиться

It makes the call on the same thread. You can check by stepping through the code. There is nothing wrong with that approach.

0
ответ дан 28 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

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