У меня есть поток, который работает в фоновом режиме во время асинхронной загрузки. Цель потока - определить, остановлена ли загрузка. Мой код в основном говорит "если мы не загрузили больше байтов за последние 10 секунд, предположим, что загрузка не удалась, и сделайте это" .
Когда я попытался обновить метку в моем окне WPF, говоря, что загрузка остановлена, мне сказали, что я не могу получить к ней доступ из нестатической ссылки. Поэтому я добавил MainWindow main = new MainWindow()
, а затем добавил это в переменную, чтобы элемент WPF не был статичным. Но мне также нужно было использовать Dispatcher
, потому что другой объект уже владел этим объектом. Итак, мой код выглядел так:
MainWindow main = new MainWindow();
main.Dispatcher.BeginInvoke(new Action(delegate() {
main.mainTitle.Content = "Unable to connect to the internet";
}));
Это ничего не изменило, поэтому я изменил свой подход. Я изменил Dispatcher
на это:
MainWindow main = new MainWindow();
Application.Current.Dispatcher.BeginInvoke(new Action(delegate() {
main.mainTitle.Content = "Unable to connect to the internet";
}));
Однако, похоже, это ничего не делает, потому что в строке, которая изменяет содержимое элемента WPF, я получил ошибку 'Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им.'
Как я могу изменить содержимое этого объекта из другого потока, и почему Dispatcher
не работает?