Использование this.Dispatcher.BeginInvoke
необходимо для перемещения выполнения кода в потоке, который имеет доступ к элементам пользовательского интерфейса. Однако некоторые мысли могут стоить применять. Это может быть легко сделать это: -
this.Dispatcher.BeginInvoke(() => {
// The whole body of code needed
});
Однако есть несколько вещей, которые следует учитывать. Если весь пакетный код будет выполнять какую-либо значительную работу, не связанную с доступом к элементам пользовательского интерфейса, лучше сначала сделать это, а затем переключаться на поток пользовательского интерфейса только тогда, когда у вас есть все вместе для изменения пользовательского интерфейса. Это может означать изменение порядка, в котором происходят события, возможно, даже использование нескольких переменных для удержания значений до более позднего момента.
Во-вторых, если один и тот же обратный вызов используется очень часто из самого потока пользовательского интерфейса, то, возможно, было бы лучше перестроить код, эти обратные вызовы запускают код без использования функции сидячей функции или BeginInvoke. Метод Dispatchers CheckAccess
поможет вам определить, нужен ли BeginInvoke. Однако в вашем конкретном сценарии BeginInvoke всегда будет необходим.