我試圖在後臺工作完成時更改C1 Ribbon Button的SmallImage屬性。ComponentOne RibbonButton由後臺工作人員調用
問題是我得到「跨線程操作無效:控制'MyControl'從其創建的線程以外的線程訪問」。
我已經通過檢查Windows控件上的InvokeRequired解決了其他跨線程問題,但是,ComponenetOne控件沒有InvokeRequired屬性。
從研究我認爲訪問在progresschanged事件中的控件圖像屬性將解決該問題。以下是相關的代碼。 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();
...
}
您是否嘗試過檢查控件容器的'InvokeRequired'屬性(可能是表單)? – ScottieMc 2012-07-10 17:58:05
我已經試過,沒有運氣,正在想辦法解決這個問題,因爲沒有其他人看起來可以提供幫助。但感謝ScottieMc的回覆。 – 2012-08-01 12:01:59