111,129
社区成员
发帖
与我相关
我的任务
分享
public void UpdateAllRSS()
{
if (this.tvRSS.Nodes != null && this.tvRSS.Nodes.Count > 0)
{
//tvRSS是TreeView控件
this.tvRSS.Nodes.Clear();
foreach (FeedBase feed in objProfileManager.objProfile.Feeds)
{
TreeNode node = tvRSS.Nodes.Add(feed.DisplayName);
feed.Articles.Clear();
feed.FetchArticles();
foreach (Article article in feed.Articles.Values)
{
node.Nodes.Add(article.Title);
}
}
}
}
//例如
private void updateAllWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
System.Diagnostics.StopWatch sw=new System.Diagnostics.StopWatch();
sw.Start();
workerUpdateAllRSS(e.UserState as FeedBase);
sw.Stop();
System.Diagnostics.Debug.WriteLine(sw.ElapsedMilliseconds);//输出本次执行workerUpdateAllRSS方法的时间(单位为ms)
this.toolStripProgressBar1.Value = e.ProgressPercentage;
}
protected void workerUpdateAllRSS(FeedBase feed)
{
TreeNode node = tvRSS.Nodes.Add(feed.DisplayName);
feed.Articles.Clear();
feed.FetchArticles();
foreach (Article article in feed.Articles.Values)
{
node.Nodes.Add(article.Title);
}
}
public void InitializeBackgroundWorker()
{
this.toolStripProgressBar1.Visible = true;
this.toolStripProgressBar1.Value = 0;
this.tvRSS.Nodes.Clear();
updateAllWorker = new BackgroundWorker();
updateAllWorker.WorkerReportsProgress = true;
updateAllWorker.DoWork += new DoWorkEventHandler(updateAllWorker_DoWork);
updateAllWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(updateAllWorker_RunWorkerCompleted);
updateAllWorker.ProgressChanged += new ProgressChangedEventHandler(updateAllWorker_ProgressChanged);
this.updateAllWorker.RunWorkerAsync();
}
private void updateAllWorker_DoWork(object sender, DoWorkEventArgs e)
{
progressUpdate((BackgroundWorker)sender);
}
private void updateAllWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
{
this.toolStripProgressBar1.Visible = false;
}
}
private void updateAllWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
workerUpdateAllRSS(e.UserState as FeedBase);
this.toolStripProgressBar1.Value = e.ProgressPercentage;
}
public void progressUpdate(BackgroundWorker worker)
{
List<FeedBase> argument = objProfileManager.objProfile.Feeds;
for (int i = 0; i < argument.Count; i++)
{
if (worker.CancellationPending)
{
break;
}
else
{
worker.ReportProgress(((i + 1) * 100) / argument.Count, argument[i]);
Thread.Sleep(800);
}
}
}

//this是不是ui?
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.Text = e.ProgressPercentage.ToString();
}
//简单的一个例子
public partial class Form1 : Form
{
private BackgroundWorker worker;
public Form1()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerAsync();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.Text = e.ProgressPercentage.ToString();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
int percent = 0;
while (true)
{
(sender as BackgroundWorker).ReportProgress(percent++);
if (percent >= 100)
{
percent = 0;
}
System.Threading.Thread.Sleep(100);
}
}
}