示例#1
0
 public void qryBgTask(BgTask task)
 {
     Debug.WriteLine("{0} qryBgTask {1}", this, task.type);
     m_msgQueue.Enqueue(task);
     if (!m_WorkerIsRunning)
     {
         m_worker.RunWorkerAsync();
     }
 }
示例#2
0
 protected virtual void OnBgProcess(BgTask task)
 {
     BgProcess?.Invoke(this, task);
 }
示例#3
0
        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;
            }
        }