Exemplo n.º 1
0
        public virtual void Open(string deviceId)
        {
            if (device != null)
            {
                return;
            }

            // 排他制御用のセマフォを生成する
            var semName = Regex.Replace("WpdMtpSem" + deviceId, "[^0-9a-zA-Z]", "", RegexOptions.Singleline);

            if (sem == null)
            {
                sem = new Semaphore(1, 1, semName);
            }
            else if (!existSemaphoreName.Equals(semName))
            {
                var tempsem = sem;
                sem = new Semaphore(1, 1, semName);
                tempsem.Close();
            }

            device = new PortableDevice();
            IPortableDeviceValues clientInfo = (IPortableDeviceValues) new PortableDeviceTypesLib.PortableDeviceValues();

            device.Open(deviceId, clientInfo);
            Marshal.ReleaseComObject(clientInfo);

            // eventを受信できるようにする
            WpdEvent wpdEvent = new WpdEvent(this);
            IPortableDeviceValues eventParameter = (IPortableDeviceValues) new PortableDeviceTypesLib.PortableDeviceValues();

            device.Advise(0, wpdEvent, eventParameter, out eventCookie);
        }