簡體   English   中英

在任務運行時以另一種形式更新進度欄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM