在timer_tick期间更新文本框

时间:2018-10-10 18:34:51

标签: c#

我已经阅读了许多有关此问题的答案,但仍然无法使它起作用。我有一个带有计时器控件的简单C#WinForms应用程序。当计时器触发时,我有一些代码进行了一些处理。我想在此处理过程中使用状态更新文本框。但是在事件处理程序完成之前,文本框永远不会更新。请告诉我如何在处理期间更新文本框。

这是我的代码:

我的表格:

public Form1()
{
    InitializeComponent();

    timer1.Interval = 60000;
    timer1.Tick += new EventHandler(CheckStatus);

    timer1.Start();
}

private void CheckStatus(object Sender, EventArgs e)
{
    // Set the caption to the current time.              
    textBox1.AppendText(DateTime.Now.ToString() + Environment.NewLine);
    ProcessStatus();
}

private void ProcessStatus()
{
    textBox1.AppendText("Now updated" + Environment.NewLine);
}

如果我单步执行代码,则在退出CheckStatus之前不会更新文本框。 (我正在使用Visual Studio 2017)

我已经尝试了几件事,例如:StackOverflow

1 个答案:

答案 0 :(得分:1)

当计时器计时时,它将在GUI线程上触发。当GUI线程忙于处理(我想您正在做的事情需要很长时间)时,所有其他GUI更新将暂停。

可以运行textBox.Update()来强制此时进行更新,但这不是最佳实践。

相反,您应该在后台线程上运行您的进程。一种选择是BackgroundWorker,并使用ProgressChanged事件在GUI中显示更新。