示例#1
0
        /// <summary>
        /// 排队初始化天气信息(等待(一定的时间,让)主线程中的初始化完成后再进行当前的Task)
        /// </summary>
        private void OrderInit()
        {
            if (TokenSourceInitWeatherInfo.Token.CanBeCanceled)
            {
                TokenSourceInitWeatherInfo.Cancel();
            }

            TokenSourceInitWeatherInfo = new CancellationTokenSource();
            CancellationToken token = TokenSourceInitWeatherInfo.Token;

            Task.Factory.StartNew(() =>
            {
                if (InitComplete)
                {
                    WriteLog("\t手动更新开始");
                    InitAllWeatherInfo();
                    WriteLog("\t手动刷新结束");
                }
                else
                {
                    ShowErrorInfoStr("手动刷新操作已拦截。检测到有初始化任务尚未完成,本次天气信息刷新将在一分钟之后进行。");

                    token.WaitHandle.WaitOne(600000);

                    if (InitComplete)
                    {
                        InitAllWeatherInfo();
                    }
                }
            }, token);
        }
示例#2
0
        private void TaskWhileInit()
        {
            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    WriteLog("\t自动更新开始");
                    #region 其他初始化天气信息的Task通通取消

                    if (TokenSourceInitWeatherInfo.Token.CanBeCanceled)
                    {
                        TokenSourceInitWeatherInfo.Cancel();
                    }

                    #endregion

                    while (!InitComplete) //当有其他的更新正在进行时,就等待其完成
                    {
                        WriteLog("\t发现有未完成任务,自动更新等待中...");
                        Thread.Sleep(1000);
                    }

                    InitAllWeatherInfo();

                    WriteLog("\t自动更新结束");
                    Thread.Sleep(TimingInitInt);
                }
            });
        }