Пример #1
0
        public MainControl()
        {
            InitializeComponent();
            //初始化浏览器
            this.initChartBrowser();
            this.chartBrowser.Navigate(dirRoot + @"\Views\Browser\main.html");

            //若过了试用期并且未注册,则不进行U盘监听
            if (!deviceService.CheckEffective())
            {
                return;
            }
            deviceDic      = new Dictionary <string, bool>();
            deviceNotifier = DeviceNotifier.OpenDeviceNotifier();
            deviceNotifier.OnDeviceNotify += OnDeviceNotifyEvent;

            try
            {
                allUsbDrives = DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Removable).ToArray();
                //开启任务异步操作,避免多个采集站统计加载时界面假死
                Thread ts = new Thread(() =>
                {
                    var resourceIndex = 0;
                    var searcher      = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
                    foreach (ManagementObject dm in searcher.Get())
                    {
                        var drive   = getValueInQuotes(dm["Dependent"].ToString()) + @"\";
                        diskArray   = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');
                        driveNumber = Convert.ToInt32(diskArray[0].Remove(0, 6).Trim());
                        var disks   = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
                        foreach (ManagementObject disk in disks.Get())
                        {
                            if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber.ToString()) & disk["InterfaceType"].ToString() == "USB")
                            {
                                DeviceControl device = new DeviceControl();
                                var serialNumber     = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString()).ToUpper();
                                DriveInfo d          = allUsbDrives.FirstOrDefault(x => x.Name == drive);
                                if (d == null)
                                {
                                    continue;
                                }
                                var deviceName = d.Name;
                                var deviceRoot = d.RootDirectory;
                                var checkToken = device.CheckDeviceToken(deviceName, serialNumber);
                                if (checkToken < 0)
                                {
                                    continue;
                                }
                                if (resourceIndex == 0)
                                {
                                    MessageUtil.ShowMessage("资源已就绪,开始采集...", EnumData.MessageType.Information, this);
                                    resourceIndex++;
                                }
                                device.SetProgressDelegate += HandleRefreshProgess;
                                Action <DirectoryInfo, string> copyAction = device.CopyFilesTo;
                                copyAction.BeginInvoke(deviceRoot, serialNumber, null, null);
                            }
                        }
                    }
                });
                ts.IsBackground = true;
                ts.Start();
            }
            catch
            {
                MessageUtil.ShowMessage("资源识别失败,请重启程序!", EnumData.MessageType.Warning, this);
            }
        }
Пример #2
0
        private void OnDeviceNotifyEvent(object sender, DeviceNotifyEventArgs e)
        {
            if (e.EventType == EventType.DeviceArrival)
            {
                //检查当前设备是否需要续传文件
                if (e.Device == null)
                {
                    return;
                }
                //已存在同步资源的采集站,跳过
                var serialNumber = e.Device.SerialNumber.ToUpper();
                if (deviceDic.ContainsKey(serialNumber) && deviceDic[serialNumber])
                {
                    return;
                }
                if (!deviceDic.ContainsKey(serialNumber))
                {
                    deviceDic.Add(serialNumber, true);
                }
                else
                {
                    deviceDic[serialNumber] = true;
                }

                //开启任务异步操作,避免多个采集站统计加载时界面假死
                Thread ts = new Thread(() =>
                {
                    MessageUtil.ShowMessage("正在识别资源,请等待...", EnumData.MessageType.Information, this);
                    var collected = false;
                    while (!collected)
                    {
                        //每个3秒检测U盘设备
                        Thread.Sleep(3000);
                        DriveInfo[] allDrives = DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Removable).ToArray();
                        DeviceControl device  = new DeviceControl();
                        foreach (DriveInfo d in allDrives)
                        {
                            var deviceName = d.Name;
                            var deviceRoot = d.RootDirectory;
                            var checkToken = device.CheckDeviceToken(deviceName, serialNumber);
                            if (checkToken < 0)
                            {
                                continue;
                            }
                            device.SetProgressDelegate += HandleRefreshProgess;
                            Action <DirectoryInfo, string> copyAction = device.CopyFilesTo;
                            copyAction.BeginInvoke(deviceRoot, serialNumber, null, null);
                            collected = true;
                            break;
                        }
                    }
                });
                ts.IsBackground = true;
                ts.Start();
            }
            else if (e.EventType == EventType.DeviceRemoveComplete)
            {
                //移除USB设备,渲染界面资源加载状态
                if (e.Device == null)
                {
                    return;
                }
                //检测采集站同步资源状态
                var serialNumber = e.Device.SerialNumber.ToUpper();
                if (deviceDic.ContainsKey(serialNumber) && deviceDic[serialNumber])
                {
                    deviceDic[serialNumber] = false;
                }
                //开启任务异步操作,避免界面假死
                var exit = new Thread(() =>
                {
                    Thread.Sleep(3000);
                    HandleRemoveDevice(serialNumber);
                });
                exit.IsBackground = true;
                exit.Start();
            }
        }