如何使C#应用程序响应

时间:2016-10-23 15:23:21

标签: c#

我正在开发一个具有巨大计算循环的应用程序,问题是我希望标签文本能够不断更新,即更新了多少行?我在循环和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>

1 个答案:

答案 0 :(得分:0)

除非您发布有关您的目标应用程序(WPF,ASP.net,WinForms等)的更多信息,以及您目前正在做的一些代码示例,否则这个答案会有些模糊。

无论如何,您都希望尝试利用您的UI框架来进行控制更新,而不是自己手动执行。

例如,如果您的应用UI是WPF,则可以通过绑定到实现INotifyPropertyChanged接口的视图模型(或代码隐藏)上的属性来利用数据绑定。

这样,绑定到属性的控件(例如,标签或文本框)将在视图模型更改属性值时自动更新,因此您可以专注于业务逻辑,而不是尝试手动更新用户界面自己。