Wpf &引用;调用线程无法访问此对象,因为其他线程拥有它。”;用推特器

Wpf &引用;调用线程无法访问此对象,因为其他线程拥有它。”;用推特器,wpf,backgroundworker,Wpf,Backgroundworker,我正在WPF中开发一个twitter客户端,我想使用backgroundworker来更新一条tweet,但结果显示错误消息“调用线程无法访问此对象,因为其他线程拥有它” public NewTweet() { 初始化组件(); this.MouseLeftButtonDown+=(o,e)=>DragMove(); worker.WorkerReportsProgress=true; worker.DoWork+=DoWork; worker.RunWorkerCompleted+=Worke

我正在WPF中开发一个twitter客户端,我想使用backgroundworker来更新一条tweet,但结果显示错误消息“调用线程无法访问此对象,因为其他线程拥有它”

public NewTweet()
{
初始化组件();
this.MouseLeftButtonDown+=(o,e)=>DragMove();
worker.WorkerReportsProgress=true;
worker.DoWork+=DoWork;
worker.RunWorkerCompleted+=WorkerCompleted;
}
无效DoWork(对象发送方,DoWorkEventArgs e)
{
TwitterResponse tweetResponse=TwitterStatus.Update(令牌,txTweet.Text);
系统。线程。线程。睡眠(5);
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
worker.RunWorkerAsync();
}

多谢各位

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

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

可能重复的
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(); 
}