«Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им». с твиттерзайзером - PullRequest
1 голос
/ 21 января 2012

Я разрабатываю клиент для Twitter в WPF и хочу использовать фонового работника для обновления твита, но в результате выдается это сообщение об ошибке «Вызывающий поток не может получить доступ к этому объекту, поскольку его принадлежит другой поток»

public NewTweet()
{
    InitializeComponent();

    this.MouseLeftButtonDown += (o, e) => DragMove();
    worker.WorkerReportsProgress = true;
    worker.DoWork += DoWork;
    worker.RunWorkerCompleted += WorkerCompleted; 
}

void DoWork(object sender, DoWorkEventArgs e)
{
    TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(token, txttweet.Text);
    System.Threading.Thread.Sleep(5);
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    worker.RunWorkerAsync(); 
}

большое спасибо.

1 Ответ

2 голосов
/ 21 января 2012

Вы получите эту ошибку, если попытаетесь обновить элементы интерфейса непосредственно из метода DoWork.

Чтобы сообщить о прогрессе, вы должны использовать метод BackgroundWorker.ReportProgress. Затем в вашем пользовательском интерфейсе подпишитесь на событие BackgroundWorker.ProgressChanged. Это гарантирует, что обновление прогресса будет направлено в правильный поток. Вы не должны обновлять элементы интерфейса непосредственно изнутри DoWork.

...