3

我正在开发一个小型应用程序,并将该项目用作通过套接字访问 adb 设备的框架:

http://madb.codeplex.com

我在主窗体构造函数中的代码:

if (useMadBee())
        {
            BridgeContainer.manager.adb.
                DeviceChanged += new EventHandler<DeviceEventArgs>(beeDeviceChanged);
            BridgeContainer.manager.adb.
                DeviceConnected += new EventHandler<DeviceEventArgs>(beeDeviceConnected);
            BridgeContainer.manager.adb.
                DeviceDisconnected += new EventHandler<DeviceEventArgs>(
                    beeDeviceDisconnected);
        }

其中 adb 是 AndroidDebugBruidge(来自 MadBee 的类)

这是我的事件处理程序之一:

public void beeDeviceConnected(object sender, DeviceEventArgs e)
    {
        if (((string)dev_con_synclock).Equals("y"))
        {
            dev_con_synclock = "n";
            lock (dev_con_synclock)
            {
                List<Device> lista = BridgeContainer.manager.adb.Devices;
                connectedDevices.Clear();
                this.toolStripComboDevices.Items.Clear();

                foreach (Device d in lista)
                {
                    AndroidDevice newDevice = new AndroidDevice();
                    newDevice.modelName = d.Properties["ro.build.product"].ToString();
                    newDevice.deviceSerialNumber = d.SerialNumber;
                    this.toolStripComboDevices.Items.Add(
                    newDevice.modelName + "(" + newDevice.deviceSerialNumber + ")");
                    connectedDevices.Add(newDevice);
                }

                if (connectedDevices.Count > 0)
                {
                    toolStripComboDevices.Text = toolStripComboDevices.Items[0].ToString();
                }
                else
                {
                    toolStripComboDevices.Text = "";
                }
            }
            dev_con_synclock = "y";
        }
    }

并且绕线

List<Device> lista = BridgeContainer.manager.adb.Devices;

方法停止执行,程序继续存在。当我在这条线上调试时,我可以看到在这条线方法中一切正常(我正在收集设备),突然程序转到 MadB 类 DeviceMonitor 中的 DeviceMonitorLoop 并完成几个循环。

我的程序中的块foreach(列表中的设备 d)永远不会执行,由于某种奇怪的原因,该方法不会继续执行

我做错了什么?

我可以在程序启动时轻松获取设备列表,但是当事件执行时(即设备断开连接)(顺便说一句。我不知道为什么它执行了 3 次),我的方法将不起作用

方法 beeDeviceConnected(object sender, DeviceEventArgs e) 是否有可能被其他线程取消?

4

0 回答 0