簡體   English   中英

C#事件從backgroundWorker觸發為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM