我正在为excel开发一个VSTO加载项,在这里我已经部署了一个后台工作人员来完成一些任务。我需要更新一些内容的工作表,一旦后台工作人员完成它的解释。在后台工作人员完成任务后,我将使用背景RunworkerCompleted事件来完成此任务。根据以下员额:
这里提到,如果在UI线程上创建了RunworkerCompleted,则会在UI线程上触发背景BackgroundWorker事件。我已经在加载项提供的VSTA_Main线程上部署了后台工作人员,但是与其相关的后台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
}我目前正在开发2010和Microsoft 2007。
发布于 2017-03-13 15:17:43
我不确定(我通过googling VSTA_Main发现了这个问题),但据我理解,必须在这个VSTA_Main线程上访问VSTO插件中的UI元素。
这似乎是VSTO中的一个bug,这里有一个解决办法:BackgroundWorker Not working in VSTO。
https://stackoverflow.com/questions/41486071
复制相似问题