C# task处理 IO,网络请求, 耗时处理 带参数,防 UI假 简单示例

winfrom 设计如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp7
{
    public partial class Form1 : Form
    {
       
        private int bt_exe_enabled = 0;// 1 按键2 正在执行任务中,请稍后; 0 按键1 未在执行任务中

        public Form1()
        {
            InitializeComponent();
        }

        public string makeSomething(string m)
        {
            Thread.Sleep(5000);//模拟耗时

            m = m+" 制造任务 执行完毕 
*******
 ";
            label1.Text += m;
            bt_exe_enabled = 0;
            return m;
        }


        private void Form1_Load(object sender, EventArgs e)
        {
           Control.CheckForIllegalCrossThreadCalls = false;//屏蔽与UI之间的线程检查
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (bt_exe_enabled == 1) 
            {
                MessageBox.Show("任务正在执行中,请稍后……");
                return;            
            }
            bt_exe_enabled = 1;
            label1.Text = "消息:";
            try
            {
                if (string.IsNullOrEmpty(richTextBox1.Text.Trim()))
                {
                    MessageBox.Show("请输入需要制造的事物");
                    return;
                }

                bt_exe.Enabled = false;

                Task<string> task = Task.Run(() =>
                {
                    return makeSomething(richTextBox1.Text.Trim());
                });

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                bt_exe.Enabled = true;
            }

        }
    }
}
原文地址:https://www.cnblogs.com/Apeak/p/13322709.html