Пример #1
0
 /// <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));
 }
Пример #2
0
        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);
            }
        }
Пример #3
0
            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();
            }
Пример #4
0
 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);
            }
        }
Пример #10
0
 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
        }
Пример #12
0
    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;
 }
Пример #14
0
        /// <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);
            });
        }
Пример #16
0
        //初始化核心;
        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);
                    }
                }
            }
        }
Пример #18
0
        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);
                    }
                }
            });
        }
Пример #19
0
 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();
            }
        }
Пример #21
0
        /// <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();
        }
Пример #22
0
 void Awake()
 {
     _instance = this;
 }
Пример #23
0
        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;
            });
        }
Пример #24
0
    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();
    }