将线程转换为任务

Convert a Thread to a Task

我正在尝试在以下代码中使用 .Net Task。

Thread hilo;
delegate void delegado(int valor);

private void button2_Click(object sender, EventArgs e)
        {
            hilo = new Thread(new ThreadStart(Proceso1));
            hilo.Start();
        }
public void Proceso1()
        {
            for (int i = 1; i < 101; i++)
            {
                delegado MD = new delegado(Actualizar1);
                this.Invoke(MD, new object[] { i });
                Thread.Sleep(1000);
            }
        }
public void Actualizar1(int valor)
        {
            ProgressBar1.Value = valor;

            int incremento= valor % 4;
            switch (incremento)
            {
                case 1: lblMensaje.Text = "Estamos procesando ."; break;
                case 2: lblMensaje.Text = "Estamos procesando .."; break;
                case 3: lblMensaje.Text = "Estamos procesando ..."; break;
                default: lblMensaje.Text = "Estamos procesando ...."; break;
            }
        }

当任务 运行 时,文本框必须 更新 并且当 任务已终止或取消,文本框应不会更新

并避免出现中断执行的类似消息:"The current thread is not in a single-threaded apartment"

它将用于 桌面和网络

谢谢,各种帮助。

这是对异步任务模式的直接转换:

public async void button2_Click(object sender, EventArgs e)
{
    await Proceso1();
}

private async Task Proceso1()
{
    for (int i = 1; i < 101; i++)
    {
        Actualizar1(i);
        await Task.Delay(1000);
    }
}

private void Actualizar1(int valor)
{
    ProgressBar1.Value = valor;

    int incremento = valor % 4;
    switch (incremento)
    {
        case 1: lblMensaje.Text = "Estamos procesando ."; break;
        case 2: lblMensaje.Text = "Estamos procesando .."; break;
        case 3: lblMensaje.Text = "Estamos procesando ..."; break;
        default: lblMensaje.Text = "Estamos procesando ...."; break;
    }
}

就是说,我不确定这是什么,你不能只使用 System.Windows.Forms.Timer 来完成更好的事情。