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 のクラス) です。

これは私の 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) が他のスレッドによってキャンセルされる可能性はありますか?

4

0 に答える 0