TextBox值在以后的操作之前不会更新

时间:2017-08-21 20:05:33

标签: c#

我在表单上创建了一个文本框,让用户知道他们发起的程序的状态。在此tb中显示的第一个值是"计算报告..."。在此过程中,此字段总共更新3次,但只有最终值最终可见。

    private void bRun_Click(object sender, EventArgs e)
    {
        tRunTime.Text = "Calculating report...";

        SqlConnection conn = new SqlConnection(connection);
        conn.Open();

        this.Cursor = Cursors.WaitCursor;

        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();

        using (conn)
        {
            try
            {
                //my code...                
            }
            catch (Exception r)
            {
                MessageBox.Show("Error: " + r, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            tRunTime.Text = "Calculation complete.  Exporting to Excel...";

            string sqlReport = "my sql string";

            //Populate dataset
            SqlDataAdapter adapterReport = new SqlDataAdapter(sqlReport, conn);

            DataSet dsReport = new DataSet();
            dsReport.Tables.Add(sqlReport);
            adapterReport.Fill(dsReport, sqlReport);

            ExportDataSetToExcel(sqlReport); // Local custom process that I use on many forms.  It works perfectly.

            Process.Start(@"path to temp file");
        }

        conn.Close();

        stopWatch.Stop();

        TimeSpan ts = stopWatch.Elapsed;

        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);

        tRunTime.Text = "Report run time: " + elapsedTime;

        this.Cursor = Cursors.Default;
    }

除了前两个状态阶段("计算报告......""计算完成。导出到Excel ...")之外,此处的所有内容都完美无缺。在表格上。

我对C#有些新意,所以如果你看到我对代码的其他改进,我也很满意。

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题:

UI是单线程的,因此在长时间运行的任务中不会完全响应。

解决方案:

尝试使用BackgroundWorker或其他Thread代表。两者都应该允许多线程访问UI。