Редактировать: Может быть, я вызываю RunWorkerAsync () из потока, не являющегося пользовательским интерфейсом?
У меня есть проект Excel Addin с классом ленты.В Ribbon1.vb есть метод нажатия кнопки, который создает экземпляр второго проекта, из которого будет вызываться фоновый работник:
Private Sub Btn_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Btn.Click
Dim MySecondProject As SecondProject.Form1 = New SecondProject.Form1()
MySecondProject.Show()
End Sub
MySecondProject затем вызывает BackgroundWorker из своего собственного метода нажатия кнопки, как:
BackgroundWorker1.RunWorkerAsync()
Затем, после его завершения, фоновый работник пытается обновить метку в MySecondProject:
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
SuccessLabel.Text = "Success!"
End Sub
Когда MySecondProject был Startup Project, фоновый работник отслеживал правильный потоки обновил ярлык успешно после завершения.С надстройкой Excel в качестве запускаемого проекта и созданием экземпляра MySecondProject во время выполнения фоновый работник, похоже, потерял правильную нить.Должен ли я вручную вставлять куда-нибудь Invoke или BeginInvoke, чтобы помочь фоновому специалисту отслеживать правильный поток для обновления?