2014-02-21 126 views
0

我有如下所示的EventHandler代碼。爲什麼這個MessageBox不出現?

void ConnectionManager_Error(object sender, EventArgs<string> e) 
{ 
    BeginInvoke((MethodInvoker)delegate() 
    { 
     State = ConnectState.NotFound; 
     MessageBox.Show(e.Value); 
    }); 
} 

我的問題:

的MessageBox永遠不會出現,即使設備沒有連接到計算機。

我認爲MessageBox應該顯示錯誤消息。 有人可以告訴我什麼是錯的?

注:

我有這樣的代碼,我認爲會引發錯誤的ConnectionManager事件處理程序。

private void LogError(string error) 
{ 
    if (Error != null) 
     Error(this, new EventArgs<string>(error)); 
} 

我也有這個代碼給出了一個錯誤消息包含LogError方法的字符串。

int lasterror = Marshal.GetLastWin32Error(); 
    if (lasterror != 0) 
     LogError("Bluetooth API returned: " + lasterror.ToString()); 

if (BluetoothSetServiceState(IntPtr.Zero, ref device, ref HumanInterfaceDeviceServiceClass_UUID, BLUETOOTH_SERVICE_ENABLE) != 0) 
    LogError("Failed to connect to wiimote controller"); 

另一個提示

更具體地講,我也已經有了下面的代碼:

public event EventHandler<EventArgs<string>> Error; 

ConnectionManager.Error += new EventHandler<EventArgs<string>>(ConnectionManager_Error); 

而且也是這個類:

public class EventArgs<T> : EventArgs 
{ 
    public T Value 
    { 
     get; 
     set; 
    } 

    public EventArgs(T value) 
      : base() 
    { 
     Value = value; 
    } 
} 
+0

你試過調試你的代碼嗎?在事件處理程序的第一行設置一個斷點 –

+0

我試過了,它看起來沒有錯。 是否有可能發生,因爲我在用於創建此代碼的VS的不同VStudio版本中執行此項目? _silly question._ – user3332360

+0

在單獨的線程中執行代碼是否是標準的BeginInvoke? – oleksa

回答

0

它是標準的BeginInvoke的是,在單獨的線程中執行代碼?

只能在GUI線程中使用GUI方法。 要切換到GUI線程,請嘗試Control.IsInvokeRequired和Control.Invoke方法。