使用MadBee android bridge获取连接设备列表

时间:2012-05-14 14:19:58

标签: c# android adb

我正在开发一个小应用程序,并将此项目用作通过套接字访问设备到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的类)

这是我的一个EventHandler:

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(lista中的设备d)永远不会执行,由于某种奇怪的原因,该方法将无法继续执行

我做错了什么?

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

是否可以通过其他线程取消beeDeviceConnected方法(对象发送方,DeviceEventArgs e)?

0 个答案:

没有答案