[英]C# event firing null from backgroundWorker
我有一個通過以下代碼觸發事件的庫:
public delegate void ChangedEventHandler(String currentFunction, String PCDMessage, ePcdEventType pcdEventType, ePcdEvent pcdEvent);
public event ChangedEventHandler OnStatusChange;
和
protected virtual void RaiseEvent(String strCurrentFunction, String strMessage, ePcdEventType pcdEventType, ePcdEvent pcdEvent)
{
if (OnStatusChange != null)
OnStatusChange(strCurrentFunction, strMessage, pcdEventType, pcdEvent);
}
一切正常,但是當我從以下backgroundWorker觸發事件時
bwExecute = new BackgroundWorker();
bwExecute.DoWork += BwExecute_DoWork;
bwExecute.RunWorkerCompleted += Bg_RunWorkerCompleted;
object[] parameters = new object[] { currentFunc, partProgramFilename, varsValuesList};
bwExecute.RunWorkerAsync(parameters);
RaiseEvent中的OnStatusChange始終為null,因此永遠不會觸發。 BwExecute_DoWork是:
private void BwExecute_DoWork(object sender, DoWorkEventArgs e)
{
object[] parameters = e.Argument as object[];
String currentFunc = parameters[0].ToString();
String partProgramFilename = parameters[1].ToString();
List<String> varsValueList = (List<String>)parameters[2];
ExecuteJob(currentFunc,partProgramFilename, varsValueList);
}
就像在代碼的另一部分中一樣,在ExecuteJob例程中觸發它們和RaiseEvent。
**添加**我注意到,僅在backgroundWorker內部調用時,在RaiseEvent內部調用時,OnStatusChange始終為NULL,因此不會觸發該事件。 在后台工作人員內部和外部,我總是以相同的方式調用RaiseEvent(...)。 現在了解了問題,解決方案是什么?
**編輯**我正在使用C#WPF,但我認為這沒有任何區別...
感謝您的幫助Patrick
我找到了解決方案,這很明顯。 現在很明顯。 從主窗口中,我調用了庫函數,並且僅在將那些事件與類實例分離之后,我才進行調用。 因此,如果啟動時沒有backgroundWorked,則執行是串行的,因此首先執行代碼,然后分離事件。 但是,當啟動backgroundWorker時,執行是並行的,因此在執行代碼時,即使終止上述代碼,它也會分離。 從這個錯誤。 感謝大家的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.