В моих приложениях WPF я добавил кусок кода в кнопке мыши, как показано ниже:Вызов потока не может получить доступ к этому объекту
private void btn_convert_Click(object sender, RoutedEventArgs e)
{
Thread t = new Thread(new ThreadStart(WorkerMethod));
t.SetApartmentState(ApartmentState.MTA);
t.IsBackground = true;
t.Start();
}
Внутрь моей WorkerMethod()
метод У меня есть некоторый код, как в строку ниже:
btn_convert.Content = "Convert";
Когда он достигает этой строки, он выдает исключение, поскольку вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток.
Я не хочу использовать диспетчер, поскольку он зависает от UI .. Пользовательский интерфейс должен быть отзывчивым, поэтому я не выбрал Dispatcher invoke или BeginInvoke.
Просьба дать мне ваши ценные предложения.
«Я не хочу использовать Dispatcher, как она замерзает UI» - если рабочий поток будет использовать 'Dispatcher' время от времени, пользовательский интерфейс будет отвечать , Я надеюсь, что ваш WorkerMethod не будет обновлять пакетный интерфейс. 'btn_convert.Content =" Convert "' заморозит пользовательский интерфейс за миллисекунду. – Dennis
Вы можете вызывать асинхронную версию Dispatcher.BeginInvoke, а не Invoke – David
Я думаю, что вы выполняете тяжелую работу в WorkerMethod не только с обновлением ui. Вы должны только обновлять интерфейс пользователя Dispatcher.Invoke. Я не понимаю, почему это должно создать проблему. –