/// <summary> /// 开始执行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { this.listBox1.Items.Add("初始化系统中..."); thread = new ThreadInvoker(AsynUpdateTxtMethod); thread.Stop = false; thread.Start(new System.Threading.ParameterizedThreadStart(Excete)); }
public void AddUnit(ITreeUnit parentUnit, ITreeUnit nUnit) { if (nUnit == null) { throw new ArgumentNullException($"{nameof(nUnit)}"); } ThreadInvoker.UIInvoke(() => { if (parentUnit == null) { VM.AddUnit(nUnit); } else { parentUnit.Children.Add(nUnit); } }); try { CommonEventHelper.GetEvent <TreeUnitAddedEvent>().Publish((nUnit, this)); CommonEventHelper.PublishEventToHandlers((nUnit, this as ITreeService), _treeUnitAddedEventHandlers); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } }
public void thread(System.Func <object[], object> func, System.Func <object[], object> callback) { Thread t = new Thread(new ThreadStart(delegate { func(null); ThreadInvoker.InvokeInMainThread(delegate { callback(null); }); Thread.CurrentThread.Abort(); })); t.Start(); }
public static void SafeInvoke <T>(this EventHandler <T> handler, object sender, T args) where T : EventArgs { if (handler != null) { ThreadInvoker.Invoke(() => handler.Invoke(sender, args)); } }
public void PopupDevices(List <Device> devices) { ThreadInvoker.UIInvoke(() => { Devices.Clear(); try { if (devices == null || devices.Count == 0) { TipWord = ServiceProvider.Current?.GetInstance <ILanguageService>()?.FindResourceString("PleaseConnectToPhone"); return; } devices.ForEach(p => { var newDev = new AdbDeviceModel { Name = p.Disply, Device = p }; Devices.Add(newDev); }); SelectedDevice = Devices[0]; TipWord = ServiceProvider.Current?.GetInstance <ILanguageService>()?.FindResourceString("ChooseDeviceDetected"); } catch (Exception ex) { Logger.WriteLine($"{nameof(DeviceSelectorViewModel)}->{ nameof(PopupDevices)}:{ ex.Message}"); MsgBoxService.ShowError($"{nameof(PopupDevices)}:{ex.Message}"); } }); }
public static void SafeInvoke(this MouseEventHandler handler, object sender, MouseEventArgs args) { if (handler != null) { ThreadInvoker.Invoke(() => handler.Invoke(sender, args)); } }
/// <summary> /// 使用指定程序打开文件; /// </summary> /// <param name="fileName"></param> /// <param name="proPath"></param> public void OpenFileWith(string fileName, string proPath) { ThreadInvoker.BackInvoke(() => { try { System.Diagnostics.Process.Start(proPath, $"\"{fileName}\""); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } }); }
public MessageBoxResult Show(string msgText, string caption, MessageBoxButton button) { var vm = new MessageBoxWindowViewModel(button, msgText, caption); var msg = new MessageBoxWindow { WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner, DataContext = vm }; if (ShellService.Current.Shell is System.Windows.Window shell && shell.IsLoaded) { msg.ShowInTaskbar = false; msg.Owner = shell; } var res = msg.ShowDialog(); #if DEBUG ThreadInvoker.BackInvoke(() => { Thread.Sleep(1000); for (int i = 0; i < 10; i++) { System.GC.Collect(); System.GC.WaitForPendingFinalizers(); } }); #endif msg.DataContext = null; switch (vm.DialogResult) { case null: if (button == MessageBoxButton.YesNoCancel) { return(MessageBoxResult.Cancel); } return(MessageBoxResult.None); case false: return(MessageBoxResult.No); case true: if (button == MessageBoxButton.OK) { return(MessageBoxResult.OK); } return(MessageBoxResult.Yes); default: return(MessageBoxResult.None); } }
private void RefreshFilesCount(IFolderBrowserDataContext dataContext) { if (dataContext == null) { return; } var vm = dataContext.FolderBrowserViewModel; if (vm == null) { return; } long fileCount = 0; long regFileCount = 0; long dirCount = 0; try { foreach (var file in vm.FileRows) { if (file.File is IRegularFile) { regFileCount++; } else if (file.File is IDirectory) { dirCount++; } fileCount++; } ThreadInvoker.UIInvoke(() => { var fileCountItem = StatusBarService.GetOrCreateStatusBarTextItem(Constants.StatusBarItemText_FileCount, GridChildLength.Auto, 5); var regFileCountItem = StatusBarService.GetOrCreateStatusBarTextItem(Constants.StatusBarItemGUID_RegFileCount, GridChildLength.Auto, 6); var dirCountItem = StatusBarService.GetOrCreateStatusBarTextItem(Constants.StatusBarItemGUID_DirectoryCount, GridChildLength.Auto, 7); fileCountItem.Text = $"{LanguageService.FindResourceString(Constants.StatusBarItemText_FileCount)} {fileCount}"; regFileCountItem.Text = $"{LanguageService.FindResourceString(Constants.StatusBarItemText_RegFileCount)} {regFileCount}"; dirCountItem.Text = $"{LanguageService.FindResourceString(Constants.StatusBarItemText_DirectoryCount)} {dirCount}"; }); } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); } }
public void Handle(IHexDataContext hexContext) { ThreadInvoker.BackInvoke(() => { var cmi = CommandItemFactory.CreateNew(null); cmi.Name = LanguageService.FindResourceString(Constants.ContextCommandName_EncodingSelect); foreach (var encoding in _bytesToCharEncodings) { cmi.AddChild(CreateEncodingCommand(hexContext, encoding)); } ThreadInvoker.UIInvoke(() => { hexContext.AddContextCommand(cmi); if (_bytesToCharEncodings.Length != 0) { hexContext.BytesToCharEncoding = _bytesToCharEncodings[0]; } }); }); }
public void ShowDialog() { RunTask(); window.Canceld += delegate { Canceld?.Invoke(this, EventArgs.Empty); }; window.ShowDialog(); #if DEBUG ThreadInvoker.BackInvoke(() => { System.Threading.Thread.Sleep(1000); for (int i = 0; i < 2; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } }); #endif }
public static void InvokeInMainThread(System.Action _delegate) { if (_instance == null) { var obj = FindObjectOfType <ThreadInvoker>(); if (obj == null) { var _obj = new GameObject("Invoker", typeof(ThreadInvoker)); _instance = _obj.GetComponent <ThreadInvoker>(); } else { _instance = obj; } } _instance.delegates.Add(_delegate); }
private void RunTask() { ThreadInvoker.BackInvoke(() => { try { DoWork?.Invoke(this, new DoWorkEventArgs(this)); window.Dispatcher.Invoke(() => { window.Close(); RunWorkerCompleted?.Invoke(this, new RunWorkerCompletedEventArgs(null, null, CancellationPending)); }); } catch (Exception ex) { window.Dispatcher.Invoke(() => { window.Close(); RunWorkerCompleted?.Invoke(this, new RunWorkerCompletedEventArgs(null, ex, CancellationPending)); }); } }); window.Owner = Application.Current.MainWindow; window.ShowInTaskbar = false; }
/// <summary> /// 添加取证信息节点; /// </summary> /// <param name="cFile"></param> public void AddForensicUnit(ICaseEvidence cFile) { ITreeUnit fUnit = null; var caseService = ServiceProvider.Current.GetInstance <ICaseService>(); if (caseService == null) { LoggerService.Current?.WriteCallerLine($"{nameof(caseService)} can't be null!"); } ThreadInvoker.UIInvoke(() => { var tUnit = GetCaseFileUnit(cFile); if (tUnit != null) { fUnit = TreeUnitFactory.Current.CreateNew(Constants.ForensicInfoUnit); fUnit.Label = FindResourceString("ForensicInfo"); tUnit.Children.Add(fUnit); } }); }
public void LoadRecords() { if (_loaded) { return; } _loaded = true; IsBusy = true; ThreadInvoker.BackInvoke(() => { //通知进度; var opStream = new OperatebleStream(Stream); //释放中断处理; _dispoingActions.Add(opStream.Break); var percentage = 0; //通知进度; opStream.PositionChanged += (sender, e) => { if (percentage == (int)(e * 100 / opStream.Length)) { return; } percentage = (int)(e * 100 / opStream.Length); BusyWord = $"{percentage}%"; }; try { Records = UsnRecordV2.ReadRecordsFromStream(opStream).ToList(); IsBusy = false; } catch (Exception ex) { LoggerService.WriteException(ex); BusyWord = ex.Message; } //取消释放中断处理; _dispoingActions.Remove(opStream.Break); }); }
//初始化核心; private void InitilizeCore() { IsLoading = true; ThreadInvoker.BackInvoke(() => { try { _comObject = ComObject.Current; } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); return; } var units = GetUnitsFromObject(); ThreadInvoker.UIInvoke(() => { DriveUnits.AddRange(units); }); IsLoading = false; }); }
/// <summary> /// 递归保存目录; /// </summary> /// <param name="dir">目录本体</param> /// <param name="drPath">目标路径</param> /// <param name="saveFileFunc">文件保存通知进度委托</param> /// <param name="isCancel">动作是否取消委托</param> private static void TraverseSaveDirectory(IDirectory dir, string drPath, Action <IRegularFile, string, string> saveFileFunc, Func <bool> isCancel = null) { if (dir.Children != null) { foreach (var p in dir.Children) { if (isCancel?.Invoke() == true) { return; } if (p is IDirectory direct) { if (!SysIO.Directory.Exists($"{drPath}/{dir.Name}")) { try { SysIO.Directory.CreateDirectory($"{drPath}/{dir.Name}"); } catch (Exception ex) { LoggerService.WriteCallerLine($" Creating Directory:{ex.Message}"); ThreadInvoker.UIInvoke(() => { MsgBoxService.ShowError($"{LanguageService.FindResourceString("FailedToCreateDirectory")}" + $"{drPath}/{dir.Name}:{ex.Message}"); }); } } if (!direct.IsBack && !direct.IsLocalBackUp && direct.Name != ".." && direct.Name != ".") { TraverseSaveDirectory(direct, $"{drPath}/{dir.Name}", saveFileFunc, isCancel); } } else if (p is IRegularFile regFile) { saveFileFunc(regFile, $"{drPath}/{dir.Name}", p.Name); } } } }
public void Handle() { var dts = FileExplorerDataContextFactory.Current?.GetAllFolderBrowserDataContext(); if (dts == null) { return; } ThreadInvoker.BackInvoke(() => { foreach (var dt in dts) { var files = dt.FolderBrowserViewModel?.FileRows; if (files == null) { continue; } foreach (var file in files) { file.NotifyProperty(Constants.FileMetaDataGUID_NameCategory); } } }); }
private void Awake() { _instance = this; }
private static void RecoverFiles(IEnumerable <IFile> files) { if (files == null) { throw new ArgumentNullException(nameof(files)); } long readSize = 0; long totalSize = 0; try { #region 统计总大小; foreach (var file in files) { if (file is IDirectory direc) { if (!direc.IsBack && !direc.IsLocalBackUp) { totalSize += direc.GetSubSize(); } } else if (file is IRegularFile) { totalSize += file.Size; } } #endregion } catch (Exception ex) { LoggerService.WriteCallerLine($"Computing Size:{ex.Message}"); MsgBoxService.ShowError($"{LanguageService.FindResourceString("FaileToToComputeTotalSize")}:{ex.Message}"); return; } var proDialog = DialogService.Current.CreateLoadingDialog(); proDialog.WindowTitle = $"{LanguageService.FindResourceString("FilesBeingCopied")}"; void saveFileFunc(IRegularFile rFile, string drPath, string fileName) { FileStream fs = null; try { fs = System.IO.File.Create($"{drPath}/{fileName ?? rFile.Name}"); int read; using (var mulS = rFile.GetInputStream()) { if (mulS == null) { return; } var buffer = new byte[10485760]; mulS.Position = 0; while ((read = mulS.Read(buffer, 0, buffer.Length)) != 0 && !proDialog.CancellationPending) { fs.Write(buffer, 0, read); readSize += read; var pro = (int)(readSize * 100 / (totalSize != 0 ? totalSize : 4096)); proDialog.ReportProgress(pro <= 100 ? pro : 100, null, $"{LanguageService.FindResourceString("CurExtractingFile")}:{fileName}"); } } } catch (Exception ex) { LoggerService.WriteCallerLine(ex.Message); ThreadInvoker.UIInvoke(() => { MsgBoxService.ShowError($"{LanguageService.FindResourceString("FailedToExtractFile")}:{ex.Message}"); }); } finally { fs?.Close(); } } if (files.Count() == 1 && files.First() is IRegularFile regFile) { var saveFileName = DialogService.Current.GetSaveFilePath(regFile.Name); if (string.IsNullOrEmpty(saveFileName)) { return; } var fullPath = saveFileName; var drPath = fullPath.Substring(0, fullPath.LastIndexOf("\\")); var fileName = fullPath.Substring(fullPath.LastIndexOf("\\") + 1); proDialog.DoWork += (sender, e) => { if (!System.IO.Directory.Exists(drPath)) { SysIO.Directory.CreateDirectory(drPath); } saveFileFunc(regFile, drPath, fileName); }; proDialog.RunWorkerCompleted += (sender, e) => { if (!e.Cancelled) { Process.Start("explorer.exe", SysIO.Path.GetFullPath(drPath)); } }; proDialog.ShowDialog(ViewProvider.GetView(Contracts.Shell.Constants.ShellView)); } else { var drPath = DialogService.Current.OpenDirect(); if (string.IsNullOrEmpty(drPath)) { return; } proDialog.DoWork += (sender, e) => { if (!System.IO.Directory.Exists(drPath)) { System.IO.Directory.CreateDirectory(drPath); } foreach (var file in files) { if (file is IDirectory direct) { TraverseSaveDirectory(direct, drPath, saveFileFunc, () => proDialog.CancellationPending); } else if (file is IRegularFile regFile2) { saveFileFunc(regFile2, drPath, file.Name); } if (proDialog.CancellationPending) { break; } } }; proDialog.RunWorkerCompleted += (sender, e) => { if (!e.Cancelled) { Process.Start("explorer.exe", SysIO.Path.GetFullPath(drPath)); } }; proDialog.ShowDialog(); } }
/// <summary> /// 加载案件; /// </summary> /// <param name="cFile"></param> public void LoadCase(ICase cs) { if (cs == null) { throw new ArgumentNullException(nameof(cs)); } //关闭尚未关闭的案件; if (CurrentCase != null) { CloseCurrentCase(); } //若当前案件仍不为空,则关闭案件未完成,需中断加载案件; if (CurrentCase != null) { return; } //发布案件加载中事件; CommonEventHelper.GetEvent <CaseLoadingEvent>().Publish(cs); CurrentCase = cs; //从文档中加载证据项; var msg = ServiceProvider.Current.GetInstance <IDialogService>()?.CreateDoubleLoadingDialog(); if (msg == null) { LoggerService.Current?.WriteCallerLine($"{nameof(IDialogService)} can't be null."); return; } msg.Title = LanguageService.Current?.FindResourceString(LoadingCase); msg.DoWork += delegate { //构建进度回调器; var reporter = ProgessReporterFactory.CreateNew(); reporter.ProgressReported += (sender, e) => { msg.ReportProgress(e.totalPer, e.detailPer, e.desc, e.detail); }; //证据项元素; var evidenceElems = cs.XDoc.Root.Elements(Contracts.Casing.Constants.CaseEvidenceRootElemName); foreach (var elem in evidenceElems) { try { var csEvidence = LoadCaseEvidenceFromXElem(elem); //加载证据项; CurrentCase.LoadCaseEvidence(csEvidence, reporter); } catch (Exception ex) { Logger.WriteCallerLine(ex.Message); ThreadInvoker.UIInvoke(() => { MsgBoxService.ShowError(ex.Message); }); } } //发布加载案件完成的事件; CommonEventHelper.GetEvent <CaseLoadedEvent>().Publish(); CommonEventHelper.PublishEventToHandlers <ICaseLoadedEventHandler>(); }; msg.ShowDialog(); }
void Awake() { _instance = this; }
public void Handle(IFolderBrowserDataContext folderBrowserDataContext) { if (folderBrowserDataContext == null) { return; } if (folderBrowserDataContext.FolderBrowserViewModel == null) { return; } if (folderBrowserDataContext.FolderBrowserViewModel.OwnedFileCollection == null) { return; } var navContext = FileExplorerDataContextFactory.CreateNavMenuDataContext(); folderBrowserDataContext.StackGrid.AddChild(navContext, Contracts.Controls.GridChildLength.Auto); folderBrowserDataContext.FolderBrowserViewModel.IsBusy = true; folderBrowserDataContext.FolderBrowserViewModel.BusyWord = LanguageService.FindResourceString(Constants.BusyWord_NavMenuBeingBuilt); ThreadInvoker.BackInvoke(() => { //跳转目录时导航节点变化; folderBrowserDataContext.FolderBrowserViewModel.CurrentPathChanged += (sender, e) => { var currentPath = folderBrowserDataContext.FolderBrowserViewModel.CurrentPath; if (currentPath == null) { return; } navContext.NavMenuViewModel.SelectedPath = currentPath; }; //导航选中节点发生变化时跳转目录; navContext.NavMenuViewModel.InternalSelectedPathChanged += (sender, e) => { var slPath = navContext.NavMenuViewModel.SelectedPath; if (string.IsNullOrEmpty(slPath)) { return; } folderBrowserDataContext.FolderBrowserViewModel.CurrentPath = slPath; }; //创建数节点; var node = CreateNodeModelWithFileCollection(folderBrowserDataContext.FolderBrowserViewModel.OwnedFileCollection); TraveseTreeChildren( folderBrowserDataContext.FolderBrowserViewModel.OwnedFileCollection, node, CreateChildrenCollection, (pNode, newNode) => pNode.Children.Add(newNode), CreateNodeModelWithFileCollection ); navContext.NavMenuViewModel.RootNavNode = node; folderBrowserDataContext.FolderBrowserViewModel.IsBusy = false; folderBrowserDataContext.FolderBrowserViewModel.BusyWord = string.Empty; }); }
void DownloadWorker(object url) { string _url = url.ToString(); try { string _filepath = RegGet(_url); Stream write; long start_position = 0; if (File.Exists(_filepath)) { write = File.OpenWrite(_filepath); start_position = write.Length; write.Seek(start_position, SeekOrigin.Current); } else { write = new FileStream(_filepath, FileMode.Create); } try { HttpWebRequest httpWebRequest = WebRequest.Create(_url) as HttpWebRequest; if (start_position != 0) { httpWebRequest.AddRange(start_position); } Stream read = httpWebRequest.GetResponse().GetResponseStream(); byte[] buffer = new byte[512]; int read_size = read.Read(buffer, 0, buffer.Length); while (read_size > 0) { write.Write(buffer, 0, read_size); read_size = read.Read(buffer, 0, buffer.Length); } write.Close(); read.Close(); if (data_callback.ContainsKey(_url)) { ThreadInvoker.InvokeInMainThread(delegate { data_callback[_url](_filepath); data_callback.Remove(_url); }); } } catch (Exception e) { write.Close(); throw new Exception(e.ToString()); } unReg(_url); data_thread.Remove(_url); } catch (Exception e) { Debug.LogError(e.ToString()); data_thread.Remove(_url); Thread.CurrentThread.Abort(); } Thread.CurrentThread.Abort(); }