“调用线程无法访问此对象,因为另一个线程拥有它。”与Twitterizer

时间:2012-01-21 03:10:36

标签: wpf backgroundworker

我正在WPF中开发一个Twitter客户端,我想使用后台工作者来更新推文,但是会产生这个错误消息"调用线程无法访问此对象,因为另一个线程拥有它&#34 ;。

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 个答案:

答案 0 :(得分:2)

如果您尝试直接从DoWork方法内部更新UI元素,则会出现此错误。

要报告进度,您应该使用BackgroundWorker.ReportProgress方法。然后,在您的UI中,订阅BackgroundWorker.ProgressChanged事件。这将确保将进度更新编组到正确的线程上。您不应直接从DoWork内部更新UI元素。