コード例 #1
0
 private void InitProperty()
 {
     Task    = new TaskInfo();
     Setting = new Settings
     {
         IsAuto         = MyAppInfo.Instance().Setting.IsAuto,
         CheckTick      = MyAppInfo.Instance().Setting.CheckTick,
         KillNotRespond = MyAppInfo.Instance().Setting.KillNotRespond,
         TaskList       = MyAppInfo.Instance().Setting.TaskList
     };
 }
コード例 #2
0
        public MonitorWindowViewModel(IEventAggregator eventAggregator)
        {
            App    = MyAppInfo.Instance();
            IsAuto = App.Setting.IsAuto;
            FileManager.TaskCheckAll();

            _EventAggregator = eventAggregator;
            _EventAggregator.GetEvent <SettingEvent>().Subscribe((e) =>
            {
                this.TaskList = new ObservableCollection <TaskInfo>(e.TaskList);
                RaisePropertyChanged("TaskList");
            });
        }
コード例 #3
0
 public PopupDialogBase()
 {
     MyAppInfo.Instance().LoadSettings();
     InitProperty();
 }
コード例 #4
0
        // 생성자
        public MainWindowViewModel(IEventAggregator eventAggregator)
        {
            dispatcher       = Application.Current.Dispatcher;
            _EventAggregator = eventAggregator;
            App = MyAppInfo.Instance();
            App.LoadSettings();

            FileManager.OnRunTask = (s) =>
            {
                Log($"Run: {s}", LogType.Normal);
            };
            FileManager.OnKillTask = (s) =>
            {
                Log($"Kill: {s}", LogType.Normal);
            };
            FileManager.OnResponseFail = (s) =>
            {
                Log($"응답없음 발생: {s}", LogType.Warning);
            };
            FileManager.OnWerFault = () =>
            {
                dtLastTime = DateTime.Now;
                Log($"WerFault 감지: {MaxSec}초 후 Kill 합니다. ", LogType.Warning, false);
            };

            #region 스레드
            dispatcher.Invoke(async() =>
            {
                await Task.Run(async() =>
                {
                    while (true)
                    {
                        // 현재시각 표시
                        CurrentTime = DateTime.Now;

                        // 프로그램 상태 체크
                        FileManager.TaskCheckAll();

                        // 자동 실행
                        if (App.Setting.IsAuto)
                        {
                            if (App.StxTick >= App.Setting.CheckTick)
                            {
                                App.StxTick = 0;
                                FileManager.RunProcess();
                            }
                            else
                            {
                                App.StxTick++;
                            }
                        }
                        else
                        {
                            App.StxTick = 0;
                        }

                        // 현재 정보 이벤트 게시
                        _EventAggregator.GetEvent <SettingEvent>().Publish(MyAppInfo.Instance().Setting);

                        // 프로그레스바
                        PbVal   = App.StxTick;
                        PbMax   = App.Setting.CheckTick;
                        IsAuto  = App.Setting.IsAuto;
                        SelName = App.SelName;

                        // WerFault 제거
                        if (MyAppInfo.Instance().IsWerFault&& dtLastTime.HasValue)
                        {
                            var sec = DateTime.Now - dtLastTime.Value;
                            if (sec.TotalSeconds >= MaxSec)
                            {
                                // 죽이고
                                FileManager.KillProcess("WerFault");
                                await Task.Delay(1000);
                                // 1초 뒤에 또 죽이고 (한번에 안 죽음)
                                FileManager.KillProcess("WerFault");
                                MyAppInfo.Instance().IsWerFault = false;
                                dtLastTime = null;
                            }
                            else
                            {
                                Log($"WerFault 감지: {MaxSec - (int)sec.TotalSeconds}초 후 Kill 합니다. ", LogType.Warning, false);
                            }
                        }

                        // 스레드 지연시간
                        await Task.Delay(1000);
                    }
                });
            });

            #endregion
        }