方法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(); } } }