首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景RunworkerCompleted事件不触发VSTA_Main线程: Excel VSTO Addin

背景RunworkerCompleted事件不触发VSTA_Main线程: Excel VSTO Addin
EN

Stack Overflow用户
提问于 2017-01-05 13:13:45
回答 1查看 662关注 0票数 1

我正在为excel开发一个VSTO加载项,在这里我已经部署了一个后台工作人员来完成一些任务。我需要更新一些内容的工作表,一旦后台工作人员完成它的解释。在后台工作人员完成任务后,我将使用背景RunworkerCompleted事件来完成此任务。根据以下员额:

这里提到,如果在UI线程上创建了RunworkerCompleted,则会在UI线程上触发背景BackgroundWorker事件。我已经在加载项提供的VSTA_Main线程上部署了后台工作人员,但是与其相关的后台RunworkerCompleted事件是在任意工作线程上触发的。对于这个问题,我有以下的疑问:

  1. VSTA_Main线程与excel的UI线程不同吗?(我想是的,但我只是想确认一下)
  2. 如何使用synchronizationcontext (或任何其他可能的方法)来管理线程部署,以便在所需线程上触发后台RunworkerCompleted事件。

在我的例子中,简化的代码如下所示:

代码语言:javascript
复制
// 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
}

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

EN

回答 1

Stack Overflow用户

发布于 2017-03-13 15:17:43

  1. VSTA_Main线程与excel的UI线程不同吗?(我想是的,但我只是想确认一下)

我不确定(我通过googling VSTA_Main发现了这个问题),但据我理解,必须在这个VSTA_Main线程上访问VSTO插件中的UI元素。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41486071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档