C# 未在VSTA_主线程上触发后台RunworkerCompleted事件:Excel VSTO加载项
我正在开发一个VSTO加载项for excel,其中部署了一个后台工作程序来执行一些任务。我需要在后台工作人员完成练习后更新工作表上的一些内容。 在后台工作程序完成其任务后,我将使用后台RunworkerCompleted事件来执行此任务。根据以下帖子:C# 未在VSTA_主线程上触发后台RunworkerCompleted事件:Excel VSTO加载项,c#,multithreading,vsto,backgroundworker,synchronizationcontext,C#,Multithreading,Vsto,Backgroundworker,Synchronizationcontext,我正在开发一个VSTO加载项for excel,其中部署了一个后台工作程序来执行一些任务。我需要在后台工作人员完成练习后更新工作表上的一些内容。 在后台工作程序完成其任务后,我将使用后台RunworkerCompleted事件来执行此任务。根据以下帖子: 需要指出的是,如果BackgroundWorker是在UI线程上创建的,则会在UI线程上激发后台RunworkerCompleted事件。我已在加载项提供的VSTA_主线程上部署了后台工作线程,但与之关联的后台RunworkerComp
// 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
VSTA_Main
线程上完成
VSTA_Main
线程上完成
这似乎是VSTO中的一个错误,这里有一个解决方法:。能否显示启动它的代码?开始和结束时的线程ID是什么?嗨,Patrick,刚刚添加了代码:)线程ID随每次运行而变化。最初,代码在调用后台工作线程的VSTA_主线程上运行。后台工作线程任务完成后的后台RunworkerCompleted事件将在另一个工作线程(不是VSTA_Main,也不是后台工作线程)上触发。这3个线程的线程ID在不同的runsCan中是不同的。是否显示启动它的代码?开始和结束时的线程ID是什么?嗨,Patrick,刚刚添加了代码:)线程ID随每次运行而变化。最初,代码在调用后台工作线程的VSTA_主线程上运行。后台工作线程任务完成后的后台RunworkerCompleted事件将在另一个工作线程(不是VSTA_Main,也不是后台工作线程)上触发。这3个线程的线程ID在不同的运行中是不同的