110,532
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void GUIDelegate(string paramString);
BackgroundWorker bgw = new BackgroundWorker();
private void button1_Click(object sender, EventArgs e)
{
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.WorkerSupportsCancellation = true;
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
while (!bgw.CancellationPending)
{
DoGUIUpdate((i++).ToString());
System.Threading.Thread.Sleep(1000);
}
}
int i = 0;
public void DoGUIUpdate(string paramString)
{
if (this.InvokeRequired)
{
GUIDelegate delegateMethod = new GUIDelegate(DoGUIUpdate);
this.Invoke(delegateMethod, new object[] { paramString });
}
else
{
listBox1.Items.Add("the count is:" + paramString);
}
}
}
}
我有点不太明白,backgroundworker算是建立了一个线程,这个时候去调用窗口上空间的线程,于是this.InvokeRequired等于true,就开始执行this.Invoke,但是他怎么执行到listBox1.Items.Add("the count is:" + paramString);这一行的,不是太明白,而且好像这样的程序没办法debug。
总结就是2个问题:
1.他怎么执行到listBox1.Items.Add("the count is:" + paramString);这一行的
2.这样的程序如何debug
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
//具体操作
webBrowser1.Navigate("http://www.baidu.com");
backgroundWorker2.ReportProgress(0,string.Format("{0}","可以是listview需要操作的地方"));
}
private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//线程交互,可以对UI进行处理,数据来自e.userstata as object (你想转换的数据类型)
string s = e.UserState.ToString();
}
private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//线程执行完成后的操作
}