【发布时间】:2012-05-30 11:43:07
【问题描述】:
在我的程序中,我想将非 GUI 功能分离到另一个类中,并将与 GUI 相关的东西留在主类中。但是,当工人类中的一种工人方法正在执行其工作时,我在更新进度条时遇到了问题。我知道我将不得不在这里使用多线程,但我不明白如何。我可能只是遗漏了一些简单的东西,但是当我查找有关它的信息时,似乎大多数教程都在谈论细节,但并没有很好地解释大局。我部分了解什么是调用和委托命令,但我并不真正了解它们是如何交互的。
下面是我想做的精简版。如何修改它以更新进度条,但保持窗口响应和重新绘制?
主窗体类:
public partial class Form1 : Form
{
time_waster thing = new time_waster();
public Form1()
{
InitializeComponent();
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
}
private void button1_Click(object sender, EventArgs e)
{
thing.something_that_takes_a_while();
}
}
单独的工人阶级: 上课时间浪费 { 公共时间浪费者() { }
public void something_that_takes_a_while()
{
int delay = 200;
for (int i = 0; i < 100; i++)
{
Thread.Sleep(delay);
//appropriate code to update the progress bar for each iteration of the for loop.
}
}
}
【问题讨论】:
-
使用委托和调用方法来更新 UI 控件。
标签: c# multithreading progress-bar