Если вы внимательно прочитали страницу справки help("boxplot.stats")
, в разделе возвращаемого значения сказано следующее. Мой акцент.
stats
blockquote>
вектор длиной 5, содержащий экстремум нижнего
усика, нижнего «шарнира», медианы, верхнего «шарнира» и [115 ]
крайность верхнего усика .Затем, в том же разделе, снова мой акцент.
out
blockquote>
значения любых точек данных, которые находятся за пределами крайностей усов (if (do.out)).Ваши данные имеют 4 балла. Экстремум верхнего усика , возвращенный в элементе списка
$stats
, равен500.0
, и это максимум ваших данных. Там нет ошибки.
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.
Имейте в виду, что Control.InvokeRequired возвращает false, если вы находитесь в фоновом потоке, а Control.IsHandleCreated имеет значение false. Я бы защищал код с помощью Debug.Assert, который проверяет создание неуправляемого дескриптора.
Для WinForms вызов Control.Invoke (Delegate)
отправляет сообщение в обработчик сообщений thead пользовательского интерфейса. Затем поток обрабатывает сообщение и вызывает делегата. После обработки Invoke
прекращает блокировку, и вызывающий поток возобновляет выполнение вашего кода.
It makes the call on the same thread. You can check by stepping through the code. There is nothing wrong with that approach.