我的應用程序中有一個異常處理項目,可以從任何地方調用以顯示用戶系統有問題。按照預期從UI中的某個地方撥打電話時,一切正常。當我從應用程序的任何UI部分撥打電話時,一切都會凍結。我將代碼包裝在線程安全調用中,並且在逐步執行時不需要調用Invoke。任何幫助是極大的讚賞。下面的代碼:從類線程安全調用窗體凍結應用程序
表單內
void err_DispEvent(string text)
{
if (InvokeRequired)
{
Invoke(new Error.DisplayDelegate(err_DispEvent), new object [] {text});
}
else
{
this.Show();
}
}
呼叫
public void FaultError(string errorMsg)
{
FaultForm fform = new FaultForm(errorMsg, "Internal Fault");
if (this.dispEvent != null)
{
dispEvent(errorMsg);
}
}
public event DisplayDelegate DispEvent
{
add { dispEvent += value; }
remove { dispEvent -= value; }
}
private event DisplayDelegate dispEvent;
public delegate void DisplayDelegate(string text);
樣品的類是如何在應用程序中
ECDUExceptions.Error newError = ECDUExceptions.Error.getInstance();
newError.FaultError("Heater is not responding to function calls, it has been turned off");
如果簽名匹配,是不是'BeginInvoke(err_DispEvent,text);'足夠? – Adam 2011-12-22 15:17:02
@codesparkle我相信是這樣的,我寫了很多更清晰的內容。 – 2011-12-22 15:25:37
你會介意,如果我建議編輯你的問題(顯示兩種選擇)? – Adam 2011-12-22 15:26:25