我正在开发一个具有巨大计算循环的应用程序,问题是我希望标签文本能够不断更新,即更新了多少行?我在循环和label3.Text+=counter
语句中有一个计数器变量?但它只在循环结束后更改一次,我想在每次迭代后更新它?
该问题该怎么办?我必须使用线程吗?
这是我的完整代码
private void button3_Click(object sender, EventArgs e)
{
sw.Start();
//int counter = 0;
StreamReader read = File.OpenText( openFileDialog1.FileName);
string _data = "";
string Filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Filepath += "\Temp.CSV";
//MessageBox.Show(Filepath);
File.WriteAllText(Filepath, "Timestamp, Elapsed, Client, Action/Code, Size, Method, URI, Ident, From Content\n");
while((_data=read.ReadLine()) !=null)
{
lines++;
_data = _data.Replace(" ", ",");
_data = _data.Replace(" ", ",");
_data = _data.Replace(" ", ",");
_data = _data.Replace(" ", ",");
_data = _data.Replace(" ", ",");
_data = _data.Replace(" ", ",");
//richTextBox1.Text += _data;
File.AppendAllText(Filepath, _data+"\n");
//counter++;
//foreach (char x in _data)
//{
// if (x.ToString() == " ")
// {
// output += ",";
// richTextBox1.Text += output;
// output = "";
// continue;
// }
// output += x.ToString();
//}
//richTextBox1.Text += output;
//output = "";
//richTextBox1.Text += "\n";
if (lines==2000)
break;
}
sw.Stop();
label5.Text = lines.ToString();
label6.Text = sw.Elapsed.ToString()+" Seconds";
} </code>
答案 0 :(得分:0)
除非您发布有关您的目标应用程序(WPF,ASP.net,WinForms等)的更多信息,以及您目前正在做的一些代码示例,否则这个答案会有些模糊。
无论如何,您都希望尝试利用您的UI框架来进行控制更新,而不是自己手动执行。
例如,如果您的应用UI是WPF,则可以通过绑定到实现INotifyPropertyChanged接口的视图模型(或代码隐藏)上的属性来利用数据绑定。
这样,绑定到属性的控件(例如,标签或文本框)将在视图模型更改属性值时自动更新,因此您可以专注于业务逻辑,而不是尝试手动更新用户界面自己。