我正在开发一个小型应用程序,并将该项目用作通过套接字访问 adb 设备的框架:
我在主窗体构造函数中的代码:
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) 是否有可能被其他线程取消?