方法1:

            button1.Enabled = false;
            TaskScheduler uiContext = TaskScheduler.FromCurrentSynchronizationContext();
            Task t = Task.Factory.StartNew(async () =>
             {
                 for (int i = 0; i < 5; i++)
                 {
                     Console.WriteLine("任务1: " + DateTime.Now.ToString("ss.fff"));
                     await Task.Delay(1000);
                 }
                 return 1;
             }).ContinueWith(m =>
             {
                 button1.Enabled = true;
                 Console.WriteLine("任务1:结束");
             }, uiContext);

方法2:

            button2.Enabled = false;
            TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
            Task t = Task.Factory.StartNew(async () =>
            {
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine("任务2: " + DateTime.Now.ToString("ss.fff"));
                    await Task.Delay(1000);
                }
                return 1;
            }).ContinueWith(m =>
            {
                this.Invoke(new MethodInvoker(() =>
                {
                    button2.Enabled = true;
                    Console.WriteLine("任务2:结束");
                }));
            });

 

 

using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
            Task t = Task.Factory.StartNew(() =>
             {
                 for (int i = 0; i < 5; i++)
                 {
                     Console.WriteLine("任务1: " + DateTime.Now.ToString("ss.fff"));
                     Task.Delay(1000).Wait();
                 }
                 return 1;
             }).ContinueWith(m =>
             {
                 button1.Enabled = true;
                 Console.WriteLine("任务1:结束");
             }, ui);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
            Task t = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine("任务2: " + DateTime.Now.ToString("ss.fff"));
                    Task.Delay(1000).Wait();
                }
                return 1;
            }).ContinueWith(m =>
            {
                ButtonEnabled();
            });
        }

        private void ButtonEnabled()
        {
            this.Invoke(new MethodInvoker(() =>
            {
                button2.Enabled = true;
                Console.WriteLine("任务2:结束");
            }));
        }

        private int i = 0;
        private void btnOperate_Click(object sender, EventArgs e)
        {
            lblMsg.Text = i++.ToString();
        }
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-17
  • 2021-08-29
  • 2022-12-23
  • 2021-10-30
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-28
  • 2022-12-23
  • 2021-12-28
  • 2021-11-21
  • 2021-12-22
  • 2021-07-01
  • 2022-12-23
相关资源
相似解决方案