我目前正在采用現有設計并重構它的某些方面。我試圖將 BackgroundWorker 類包裝在一個單獨的對象中,并在單獨的線程上調用數據導入。我唯一的問題是讓 StatusStrip 對象在表單上更新。該應用程序使用反射,我在包裝導入例程時考慮了這一點。到目前為止,我已經消除了所有的交叉線程。我已將用于更新表單中的 StatusStrip 的回調重定向到此包裝器對象中,并且數據導入正在回調包裝器。表單中有一個用于處理原始回調的方法。我只需要弄清楚如何跨線程調用更新。異步操作部分的工作很大程度上歸功于我從 stackoverflow 中獲得的信息。除了這個愚蠢的 StatusStrip 之外,所有這些都已連接起來。
1 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
所以,它成功了。
如果在 BackgroundWorker 包裝類中被回調,我按照尼克的建議做了以下事情:
private void updtStatus(object sender, EventArgs e)
{ if (MainForm.InvokeRequired)
{ MainForm.Invoke(new DoUIWorkHandler(MainForm.updtStatus), new object[] { sender, e }); }
}
注意:MainForm.updtStatus 是表單上的原始事件,數據導入回調以更新 StatusStrip。
我在另一個stackoverflow線程上發現了這個:
public delegate void DoUIWorkHandler();
而且,我在 BackgroundWorker 包裝器的頂部修改了我的代碼的委托:
public delegate void DoUIWorkHandler(object sender, EventArgs args);
這是我錯過的代表作品!奇跡般有效!感謝您在這件事上的所有幫助。
- 1 回答
- 0 關注
- 102 瀏覽
添加回答
舉報
0/150
提交
取消