在Winform中,大多数人都会碰到需要显示当前对数据的处理状态或是进度,该种方式,一般使用线程执行该程序,获取线程中的数据。
在处理事件时多采用线程执行的方式例如
ThreadStart threadstart = new ThreadStart(GetUrlList);
Thread thread = new Thread(threadstart);
thread.IsBackground = true;
thread.Start();
上例中GetUrlList()为执行的函数
可在GetUrlList()函数中有这样一段段
foreach (var item in list)
{
string turl = GetUrl(item);
if (!string.IsNullOrEmpty(turl))
{
turl = "http://" + turl;
SetText(turl);
}
}
定义如下委托
delegate void SetTextCallback(string text);
函数 SetText(turl),通过该函数设置在winform程序呈现界面设置当前执行的情况
private void SetText(string text)
{
// InvokeRequired需要比较调用线程ID和创建线程ID
// 如果它们不相同则返回true
if (this.txtSubUrl.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.txtSubUrl.Text = text;
}
}