私は小さなアプリケーションを開発しており、このプロジェクトをソケットを介して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 のクラス) です。
これは私の EventHandlers の 1 つです。
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(object sender, DeviceEventArgs e) が他のスレッドによってキャンセルされる可能性はありますか?