【问题标题】:Background RunworkerCompleted Event not firing on VSTA_Main Thread : Excel VSTO Addin后台 RunworkerCompleted 事件未在 VSTA_Main 线程上触发:Excel VSTO 插件
【发布时间】:2017-05-20 01:22:50
【问题描述】:

我正在为 excel 开发一个 VSTO 插件,我已经部署了一个后台工作人员来完成一些任务。一旦后台工作人员完成它的执行,我需要更新工作表上的一些内容。 一旦后台工作人员完成其任务,我将使用后台 RunworkerCompleted 事件来执行此任务。根据以下帖子:

提到如果在 UI 线程上创建了 BackgroundWorker,则会在 UI 线程上触发 Background RunworkerCompleted 事件。我已经在插件提供的 VSTA_Main 线程上部署了我的后台工作线程,但与之关联的后台 RunworkerCompleted 事件在任意工作线程上被触发。我对这个问题有以下疑问:

  1. VSTA_Main 线程与 excel 的 UI 线程有区别吗? (我认为是,但我只是想确认一下)

  2. 如何使用 synchronizationcontext(或任何其他可能的方法)管理线程部署,以便在所需线程上触发后台 RunworkerCompleted 事件。

我的简化代码如下所示:

// This code piece executes on VSTA_Main thread 

private BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync();


// This code piece executes on some random worker thread - Assume Thread 1

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    // It simulates some task
    Thread.sleep(100) 
}


// This event is raised on a random worker thread - Not Thread 1 and not VSTA_Main

private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // perform some sheet update operations
}

我目前正在开发 Microsoft Visual Studio 2010 和 Microsoft Excel 2007。

【问题讨论】:

  • 你能显示你启动它的代码吗?开始和结束时的线程ID是多少?
  • 嗨帕特里克,刚刚添加了代码:)
  • 线程 ID 随每次运行而变化。最初,代码在调用后台工作线程的 VSTA_Main 线程上运行。后台工作人员任务完成后的后台 RunworkerCompleted 事件随后在不同的工作线程(不是 VSTA_Main 和后台工作线程)上触发。这 3 个线程的线程 id 在不同的运行中是不同的

标签: c# multithreading vsto backgroundworker synchronizationcontext


【解决方案1】:
  1. VSTA_Main 线程和excel的UI线程有区别吗? (我认为是,但我只是想确认一下)

对此我不确定(我通过谷歌搜索 VSTA_Main 发现了这个问题),但据我了解,访问 VSTO 插件中的 UI 元素必须在此 VSTA_Main 线程上完成。 p>

  1. 如何使用同步上下文(或任何其他可能的方法)管理线程部署,以便在所需线程上触发后台 RunworkerCompleted 事件。

这似乎是 VSTO 中的一个错误,这里有一个解决方法:BackgroundWorker Not working in VSTO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多