private void ModuleListBox_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton != MouseButton.Left || e.ClickCount != 2) { return; } var module_select = (Module)ModuleListBox.SelectedItem; if (module_select != null) { var module = (Module)module_select.Clone(); if (DeviceListBox.SelectedItem is Device device) { XModule xmodule = (XModule)module.XModule.Clone(); var runningmodule = device.RunningModules.ToList().Find(p => p.Md5 == module.Md5); if (runningmodule != null) { Common.ShowToast("该设备正在执行模块[" + runningmodule.Name + "]中,无法重复运行!", Color.FromRgb(239, 34, 7)); return; } if (!xmodule.IsBackground()) { //如果是前台模块,同一时间只允许运行一个 runningmodule = device.RunningModules.ToList().Find(p => p.XModule.IsBackground() == false); if (runningmodule != null) { Common.ShowToast("前台模块[" + runningmodule.Name + "]正在运行中,无法同时执行两个前台模块!", Color.FromRgb(239, 34, 7)); return; } } var thread = Client.StartAction(() => { xmodule.Device = device; //显示自定义控件 var isContinue = false; Common.UiAction(() => { isContinue = xmodule.ShowUserControl(); }, false); //是否继续 if (isContinue) { Dispatcher.Invoke(() => { device.RunningModules.Add(module); }); xmodule.Start(); Console.WriteLine("设备[" + device.Id + "]成功执行模块[" + module.Name + "]"); Dispatcher.Invoke(() => { device.RunningModules.Remove(module); if (device.RunningThreads.ContainsKey(module.Md5)) { device.RunningThreads.Remove(module.Md5); } }); } else { //参数设置过程中取消执行 if (device.RunningThreads.ContainsKey(module.Md5)) { device.RunningThreads.Remove(module.Md5); } } }, ApartmentState.STA); device.RunningThreads.Add(module.Md5, thread); } } }