/// <summary> /// DoWork完成时,将获取到的弹幕保存至fetchedData供UpdateText使用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FetchBW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled == false && e.Error == null) { fetchedData result = e.Result as fetchedData; while (result.contentList.Count > 0) { danmuStorage.Add(result.contentList[0]); result.contentList.RemoveAt(0); } } else { Debug.WriteLine("获取时出现错误"); } getWebContentTimer.Stop(); }
/// <summary> /// DoWrok开始从后台获取弹幕内容 /// 将获取到的内容保存至e.Result中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FetchBW_DoWork(Object sender, DoWorkEventArgs e) { BackgroundWorker backgroundWorker = sender as BackgroundWorker; string textFetched = GetWebContent(setting.getSOURCE()); int num; List <string> contentList = new List <string>(); if (textFetched == "网络未连接。") { num = 1; contentList.Add(textFetched); // 如果网络未链接,则在弹幕中提醒 } else { num = 0; try { Debug.WriteLine("Fetch:" + textFetched); // 将获取到的JSON进行解析得到获取的弹幕数量以及所有弹幕 JObject parseResult = JObject.Parse(textFetched); dynamic dy1 = parseResult as dynamic; num = (int)dy1["seqNum"]; JArray dataArray = ((JArray)dy1["seqData"]); if (dataArray != null) { JToken data = dataArray.First; while (data != null) { contentList.Add(data.ToString()); data = data.Next; } } } catch (Newtonsoft.Json.JsonReaderException error) { // 处理JSON解析错误,这里Debug提示后直接舍弃 Debug.WriteLine("Error: JsonReaderException"); Debug.WriteLine("Fetch Text: " + textFetched); } } // 将解析结果保存至e.Result中供RunWorkerCompleted使用 fetchedData result = new fetchedData(num, contentList); Debug.WriteLine("Get " + contentList.Count.ToString() + " Results."); e.Result = result; backgroundWorker.ReportProgress(100); // 当Dowork完成时直接将进度设为100%,执行RunWorkerCompleted }