public void qryBgTask(BgTask task) { Debug.WriteLine("{0} qryBgTask {1}", this, task.type); m_msgQueue.Enqueue(task); if (!m_WorkerIsRunning) { m_worker.RunWorkerAsync(); } }
protected virtual void OnBgProcess(BgTask task) { BgProcess?.Invoke(this, task); }
private void bg_process(object sender, BgTask e) { Debug.WriteLine(string.Format("bg_process {0}", (bgTaskType)e.type)); switch ((bgTaskType)e.type) { case bgTaskType.saveFolder: { //not used throw new Exception("not use"); StorageFolder folder = (StorageFolder)e.data; //save last selected folder if (folder.Path != m_chapterPgCfg.lastPath) { m_chapterPgCfg.lastPath = folder.Path; //clear prev data m_chapterPgCfg.clean(); m_chapterPgCfg.save(); m_content.m_chapters.Clear(); } var mru = StorageApplicationPermissions.MostRecentlyUsedList; mru.Clear(); string mruToken = mru.Add(folder, folder.Path); } break; case bgTaskType.saveLessonFolder: { StorageFolder folder = (StorageFolder)e.data; //save last selected folder if (folder.Path != m_lessonPgCfg.lastPath) { m_lessonPgCfg.lastPath = folder.Path; //clear prev data m_lessonPgCfg.selectedLessons.Clear(); m_lessonPgCfg.save(); m_content.m_lessons.Clear(); } var mru = StorageApplicationPermissions.MostRecentlyUsedList; mru.Clear(); string mruToken = mru.Add(folder, folder.Path); } break; case bgTaskType.loadData: { m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.prepareProgress }); StorageFolder folder = (StorageFolder)e.data; IReadOnlyList <StorageFile> fileList = null; var t = Task.Run(async() => { fileList = await folder.GetFilesAsync(); }); t.Wait(); int n = fileList.Count; int ret = 0; for (int i = 0; i < n; i++) { t = Task.Run(async() => { ret = await m_content.loadSingleChapter(fileList[i]); }); t.Wait(); m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.updateProgress, data = (double)i * 100 / n }); } m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.hideProgress }); } break; case bgTaskType.loadLessons: { m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.prepareProgress }); StorageFolder folder = (StorageFolder)e.data; IReadOnlyList <StorageFile> fileList = null; var t = Task.Run(async() => { fileList = await folder.GetFilesAsync(); }); t.Wait(); int n = fileList.Count; int ret = 0; for (int i = 0; i < n; i++) { t = Task.Run(async() => { ret = await m_content.loadSingleLesson(fileList[i]); }); t.Wait(); m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.updateProgress, data = (double)i * 100 / n }); } m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.hideProgress }); } break; case bgTaskType.loadDict: { m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.updateStatus, data = "Loading dict ..." }); m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.prepareProgress }); Task t = Task.Run(() => { myDict.Load(); }); while (t.Status != TaskStatus.RanToCompletion) //while (myDict.loadProgress < 100) { m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.updateProgress, data = (double)myDict.loadProgress }); //myWorker.sleep(100); t.Wait(100); } Debug.Assert(myDict.loadProgress == 100); //Debug.Assert(t.Status == TaskStatus.RanToCompletion); m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.hideProgress }); m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.updateStatus, data = "Loading completed!" }); } break; case bgTaskType.delayNext: { m_bgwork.qryFgTask(new FgTask { type = (int)fgTaskType.delayNext }); } break; } }