c#无后台的Progressbar

c#无后台的Progressbar,c#,office-interop,C#,Office Interop,我正在使用COM自动化将数据写入已打开的Word文档 由于此操作需要相当长的时间,我想向用户显示progressbar 不可能在backgroundworker中执行数据写出,因为这将导致Word应用程序抛出异常rpc_e_servercall_retrylater,即使已实现MessageFilter。我了解到这是因为前台线程与后台线程通信有问题 是否可以反过来使用新线程来显示progressbar?我试图打开一个新的winform,其中只有progressbar,并在它自己的线程上打开它,但

我正在使用COM自动化将数据写入已打开的Word文档

由于此操作需要相当长的时间,我想向用户显示progressbar

不可能在backgroundworker中执行数据写出,因为这将导致Word应用程序抛出异常rpc_e_servercall_retrylater,即使已实现MessageFilter。我了解到这是因为前台线程与后台线程通信有问题

是否可以反过来使用新线程来显示progressbar?我试图打开一个新的winform,其中只有progressbar,并在它自己的线程上打开它,但它没有更新


其他想法?

这里有一个小片段,我希望能对您有所帮助

 private void BackgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
   string S = Convert.ToString(e.UserState);
   Label1.Text = S;
   ProgressBar1.PerformStep();
   S = null;
}




 Private Sub BackgroundWorker2_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BackgroundWorker2.ProgressChanged
    Dim S As String = CType(e.UserState, String)
    Label1.Text = S
    ProgressBar1.PerformStep()
    S = Nothing
End Sub

您可以使用“从后台工作线程调用”来调度工作并在主UI线程上运行吗?如果我没有错,backgroundworker会在其中公开进度事件,您可以更新进度条。WinForm是STA,当您使用另一个线程时,会出现通信问题,并且您可能会面临跨线程异常…因为control stay我在几个月前做了一些事情,让我检查一下,这样我可以给你发一些详细的信息。