由于您说在计算完成后工件会自行更正,这很可能是因为您没有给 UI 线程更新屏幕的机会,因为您正在花费 CPU 进行计算。您可能需要使用某种线程来解决问题。
Windows 窗体包含一个很好的BackgroundWorker
控件,可以使此类任务变得非常简单。只需将控件从工具箱拖到表单设计器上,然后为DoWork
和RunWorkerCompleted
事件创建事件处理程序。将您的计算放在DoWork
处理程序中,以及在处理程序中计算完成后需要对 UI 进行的任何更新RunWorkerCompleted
(重要的是要注意,您不应从DoWork
处理程序访问任何 UI 元素)。
这是一个简短的代码示例:
public partial class Form1 : Form
{
private MyCalculationState _state;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
_state = new MyCalculationState();
// Do some calculations
_state.Value = 5;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Update the UI after calculations are complete
textBox1.Text = _state.Value.ToString();
}
}