为什么没有出现这个MessageBox?

时间:2014-02-21 09:29:36

标签: c# event-handling bluetooth message

我有如下事件的EventHandler代码。

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

我的问题:

即使设备未连接到计算机,也不会出现MessageBox。

我认为MessageBox应该显示错误消息。 有人能告诉我什么是错的吗?

注意:

我有这个代码,我认为会触发ConnectionManager Error EventHandler。

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;
     }
}

1 个答案:

答案 0 :(得分:0)

标准的BeginInvoke是否在单独的线程中执行代码?

您只能在GUI线程中使用GUI方法。 要切换到GUI线程,请尝试Control.IsInvokeRequired和Control.Invoke方法。