1

Есть программа на wpf. Подключился к SQL-серверу, получаю данные и работаю. Но часто подключение или запрос выполняется не моментально, программа подвисает (или вообще вылетает, если вдруг нет сервера), хочу запускать действия в потоке, что б программа продолжала работать, а поток "брал" данные и добавлял их в программу.

Из всего инета нашёл рабочий пример только здесь: использование потоков и BackgroundWorker в WPF. Но здесь немножко не то, что надо, и просто подставив этот код в мою прогу, ничего не заработало. Пишет

Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.

Подскажите, пожалуйста, что здесь делать?

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
Rakzin Roman
  • 5,720

2 Answers2

3

WPF. В коде XAML определен Button с именем button. Там, где вылетает исключение, надо написать следующее

button.Dispatcher.BeginInvoke(new Action(delegate()
{
/// что-нибудь делаем
}));
Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
  • А для чего button? (То есть, весь код оставить так же, как и в предыдущем примере, а это вставить в той строке, где выдаёт ошибку?) – Rakzin Roman May 02 '12 at 16:28
0

Когда такая ошибка возникает, это значит, что нужно использовать Dispatcher для того, чтобы получить корректный доступ к объекту. См. внизу статьи вторую «ссылку по теме».