[英]Update progress bar in another form while task is running
**最終,我將同時運行四個任務,並具有包含四個進度條的另一種形式。 我希望每個進度條在工作任務完成時進行更新。
這就是我要為初學者做的事情。
我有一個上面有一些按鈕的表格。 當我單擊一個時,我正在創建一個新任務來做一些工作。
public partial class MyMainForm : Form
{
private void btn_doWork_Click(object sender, EventArgs e)
{
Task task = new Task(RunComparisons);
task.Start();
}
private void RunComparisons()
{
int progressBarValue = 0;
MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
pBar.ShowDialog();
foreach(string s in nodeCollection)
{
//do some work here
progressBarValue++;
pBar.updateProgressBar(progressBarValue, "some new text");
}
pBar.BeginInvoke(new Action(() => pBar.Close()));
}
}
在另一個包含帶有進度欄的表單的類中:
public partial class MyProgressBarForm : Form
{
public MyProgressBarForm(int maxValue, string textToDisplay)
{
InitializeComponent();
MyProgressBarControl.Maximum = maxValue;
myLabel.Text = textToDisplay;
}
public void updateProgressBar(int progress, string updatedTextToDisplay)
{
MyProgressBarForm.BeginInvoke(
new Action(() =>
{
MyProgressBarControl.Value = progress;
myLabel.Text = updatedTextToDisplay;
}));
}
當我單擊doWork按鈕時,進度條表單將顯示,但不會更新。 它只是坐在那里並掛起。 如果我注釋掉pBar.ShowDialog(); 那么進度條表單不會顯示,但是要完成的工作可以完美完成。
在創建自己的線程時,我可以完美地工作,但是我了解了Tasks,現在我正在嘗試使其以這種方式運行。 我哪里做錯了?
**最終,我將同時運行四個任務,並具有包含四個進度條的另一種形式。 我希望每個進度條在工作任務完成時進行更新。
這就是我要為初學者做的事情。
我有一個上面有一些按鈕的表格。 當我單擊一個時,我正在創建一個新任務來做一些工作。
public partial class MyMainForm : Form
{
private void btn_doWork_Click(object sender, EventArgs e)
{
Task task = new Task(RunComparisons);
task.Start();
}
private void RunComparisons()
{
int progressBarValue = 0;
MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
pBar.ShowDialog();
foreach(string s in nodeCollection)
{
//do some work here
progressBarValue++;
pBar.updateProgressBar(progressBarValue, "some new text");
}
pBar.BeginInvoke(new Action(() => pBar.Close()));
}
}
在另一個包含帶有進度欄的表單的類中:
public partial class MyProgressBarForm : Form
{
public MyProgressBarForm(int maxValue, string textToDisplay)
{
InitializeComponent();
MyProgressBarControl.Maximum = maxValue;
myLabel.Text = textToDisplay;
}
public void updateProgressBar(int progress, string updatedTextToDisplay)
{
MyProgressBarForm.BeginInvoke(
new Action(() =>
{
MyProgressBarControl.Value = progress;
myLabel.Text = updatedTextToDisplay;
}));
}
當我單擊doWork按鈕時,進度條表單將顯示,但不會更新。 它只是坐在那里並掛起。 如果我注釋掉pBar.ShowDialog(); 那么進度條表單不會顯示,但是要完成的工作可以完美完成。
在創建自己的線程時,我可以完美地工作,但是我了解了Tasks,現在我正在嘗試使其以這種方式運行。 我哪里做錯了?
**最終,我將同時運行四個任務,並具有包含四個進度條的另一種形式。 我希望每個進度條在工作任務完成時進行更新。
這就是我要為初學者做的事情。
我有一個上面有一些按鈕的表格。 當我單擊一個時,我正在創建一個新任務來做一些工作。
public partial class MyMainForm : Form
{
private void btn_doWork_Click(object sender, EventArgs e)
{
Task task = new Task(RunComparisons);
task.Start();
}
private void RunComparisons()
{
int progressBarValue = 0;
MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
pBar.ShowDialog();
foreach(string s in nodeCollection)
{
//do some work here
progressBarValue++;
pBar.updateProgressBar(progressBarValue, "some new text");
}
pBar.BeginInvoke(new Action(() => pBar.Close()));
}
}
在另一個包含帶有進度欄的表單的類中:
public partial class MyProgressBarForm : Form
{
public MyProgressBarForm(int maxValue, string textToDisplay)
{
InitializeComponent();
MyProgressBarControl.Maximum = maxValue;
myLabel.Text = textToDisplay;
}
public void updateProgressBar(int progress, string updatedTextToDisplay)
{
MyProgressBarForm.BeginInvoke(
new Action(() =>
{
MyProgressBarControl.Value = progress;
myLabel.Text = updatedTextToDisplay;
}));
}
當我單擊doWork按鈕時,進度條表單將顯示,但不會更新。 它只是坐在那里並掛起。 如果我注釋掉pBar.ShowDialog(); 那么進度條表單不會顯示,但是要完成的工作可以完美完成。
在創建自己的線程時,我可以完美地工作,但是我了解了Tasks,現在我正在嘗試使其以這種方式運行。 我哪里做錯了?
**最終,我將同時運行四個任務,並具有包含四個進度條的另一種形式。 我希望每個進度條在工作任務完成時進行更新。
這就是我要為初學者做的事情。
我有一個上面有一些按鈕的表格。 當我單擊一個時,我正在創建一個新任務來做一些工作。
public partial class MyMainForm : Form
{
private void btn_doWork_Click(object sender, EventArgs e)
{
Task task = new Task(RunComparisons);
task.Start();
}
private void RunComparisons()
{
int progressBarValue = 0;
MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
pBar.ShowDialog();
foreach(string s in nodeCollection)
{
//do some work here
progressBarValue++;
pBar.updateProgressBar(progressBarValue, "some new text");
}
pBar.BeginInvoke(new Action(() => pBar.Close()));
}
}
在另一個包含帶有進度欄的表單的類中:
public partial class MyProgressBarForm : Form
{
public MyProgressBarForm(int maxValue, string textToDisplay)
{
InitializeComponent();
MyProgressBarControl.Maximum = maxValue;
myLabel.Text = textToDisplay;
}
public void updateProgressBar(int progress, string updatedTextToDisplay)
{
MyProgressBarForm.BeginInvoke(
new Action(() =>
{
MyProgressBarControl.Value = progress;
myLabel.Text = updatedTextToDisplay;
}));
}
當我單擊doWork按鈕時,進度條表單將顯示,但不會更新。 它只是坐在那里並掛起。 如果我注釋掉pBar.ShowDialog(); 那么進度條表單不會顯示,但是要完成的工作可以完美完成。
在創建自己的線程時,我可以完美地工作,但是我了解了Tasks,現在我正在嘗試使其以這種方式運行。 我哪里做錯了?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.