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