当后台工作人员完成时,我正在尝试更改 C1 功能区按钮的 SmallImage 属性。
问题是我得到“跨线程操作无效:控制'MyControl'从创建它的线程以外的线程访问。”
我通过检查 Windows 控件上的 InvokeRequired 解决了其他跨线程问题,但是 ComponenetOne 控件没有 InvokeRequired 属性。
通过研究,我认为在 progresschanged 事件中访问 Controls 图像属性可以解决该问题。下面是相关代码。doWork 和 progresschanged 事件都在 Worker 线程上运行,但是我仍然遇到跨线程问题。谁能看到我可能做错了什么,或者有其他方法可以解决问题吗?
private void InitializeBackgroundWorker1()
{
BackgroundWorker1 = new BackgroundWorker();
BackgroundWorker1.DoWork +=
new DoWorkEventHandler(BackgroundWorker1_DoWork);
BackgroundWorker1.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(BackgroundWorker1_RunWorkerCompleted);
BackgroundWorker1.ProgressChanged +=
new ProgressChangedEventHandler(BackgroundWorker1_ProgressChanged);
BackgroundWorker1.WorkerReportsProgress = true;
}
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = sResult;
(sender as BackgroundWorker).ReportProgress(25);
}
private void BackgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
MyControl1.ribbonButtonStatus.SmallImage = Properties.Resources.trafficlight_green;
}
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MyControl1 = new TimeGridControl();
...
}