c# - BackgroundWorker 在 VSTO 中不工作

标签 c# vsto backgroundworker

我有一个后台 worker 。在我调用工作人员之前,我禁用了一个按钮并使 gif 可见。然后我调用 runworkerasync 方法,它运行良好直到完成。在“RunWorkerCompleted()”上,我收到跨线程错误。知道为什么吗?

    private void buttonRun_Click(object sender, EventArgs e)
    {
        if (comboBoxFiscalYear.SelectedIndex != -1 && !string.IsNullOrEmpty(textBoxFolderLoc.Text))
        {
            try
            {
                u = new UpdateDispositionReports(
                    Convert.ToInt32(comboBoxFiscalYear.SelectedItem.ToString())
                    , textBoxFolderLoc.Text
                    , Properties.Settings.Default.TemplatePath
                    , Properties.Settings.Default.ConnStr);
                this.buttonRun.Enabled = false;
                this.pictureBox1.Visible = true;

                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(bw_DoWork);
                bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
                bw.RunWorkerAsync();
                //backgroundWorker1.RunWorkerAsync();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unable to process.\nError:" + ex.Message, Properties.Settings.Default.AppName);
            }
        }
    }

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        buttonRun.Enabled = true;
        pictureBox1.Visible = false;
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        u.Execute();
    }

最佳答案

这似乎是 VSTO 和 BackgroundWorker 的问题。

解决方案是here .

基本上你需要打电话

System.Threading.SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());

在调用 RunWorkerAsync 之前。效果很好。

为了避免每次在 AddIn 的主类中有一个静态成员并重用它时都实例化该对象。这样您只需实例化一次。

关于c# - BackgroundWorker 在 VSTO 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2449515/

相关文章:

c# - 如何更新 lucene.net 索引中的字段而不是更新所有索引的示例

Excel.Application.SelectionChange 只触发一次

c# - 使用 VSTO 在 PowerPoint 中粘贴内容时格式丢失

macos - OSX 键盘快捷键后台应用程序,如何

c# - MonoTouch BackgroundWorker 调用 TextView 不工作

c# - 如何使用 Linq 对集合中的单个项目进行分组?

c# - 如何在没有后端收集器的情况下将 opentelemetry 数据导出到文件中进行测试

c# - 设置 CommandTimeout 以解决超出锁定等待超时的问题尝试重新启动事务

c# - 使程序集 COM-Visible 中断 Excel VSTO 插件的构建

c# - 取消backgroundworker操作