我的代码有效:
private void textBox1_TextChanged(object sender, EventArgs e)
{
progressBar1.Visible = true;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
progressBar1.Visible = false;
}
如果我为计算机添加一些内容,如下面的代码示例所示,计算机在完成计算之前不会显示进度条。我想要它做的是首先显示进度条,然后进行计算,然后在其他一些事件上我想隐藏进度条。为什么我不能这样做?
private void textBox1_TextChanged(object sender, EventArgs e)
{
progressBar1.Visible = true;
FindPrimeNumber(50000);
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
progressBar1.Visible = false;
}
请求的FindPrimeNumber代码:
public int FindPrimeNumber(int n)
{
int count = 0;
int a = 2;
while (count < n)
{
int b = 2;
int prime = 1;// to check if found a prime
while (b * b <= a)
{
if (a % b == 0)
{
prime = 0;
break;
}
b++;
}
if (prime > 0)
count++;
a++;
}
return (--a);
}
FindPrimeNumber代码只是使计算机暂时执行任务的一部分,因此我可以测试我的进度条是否会显示。
答案 0 :(得分:0)
我明白了。在此示例中,用户在文本框中输入一个5位数的数字,然后在表单上显示进度条,因为它正在处理数学函数中的数字,然后将结果放入第二个文本框和进度条走了。
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.TextLength == 5)
{
progressBar1.Visible = true;
int textFromTextBox1 = Int32.Parse(textBox1.Text);
backgroundWorker1.RunWorkerAsync(textFromTextBox1);
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = FindPrimeNumber((int)e.Argument);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
textBox2.Text = e.Result.ToString();
backgroundWorker1.CancelAsync();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
progressBar1.Visible = false;
}
注意:此示例不处理所有异常,但效果很好。正如您可能在代码中看到的那样,我将一个值传递给BackgroundWorker,并将其传递给FindPrimeNumber方法,然后我从BackgroundWorker中检索结果。
新手的更多说明:
我将BackgroundWorker属性WorkerSupportsCancellation设置为True。
在WinForms中,在将BackgroundWorker放到表单上之后,当您双击它时,它会为您生成DoWorkEventHandler,然后在解决方案资源管理器中转到事件并双击RunWorkerCompleted以便它可以为您生成好。否则,您将不得不进行大量的手动代码输入。