问题描述:我们在按钮事件下直接调用异步线程,会出现阻塞,程序卡死现象。如图点击直接运行按钮的效果
解决方法:在线程内运行异步线程,可以解决阻塞问题。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int PointWork(int i)
{
return i;
}
private async Task<int> OnePointWorAscnic(int i)
{
int m = await Task.Run(() => PointWork(i));
return m;
}
public void Work()
{
List<Task<int>> TaskList = new List<Task<int>>();
List<int> points = new List<int> { 1, 2, 3 };
foreach (var i in points)
{
Task<int> m = OnePointWorAscnic(i);
TaskList.Add(m);
}
foreach (var task in TaskList)
{
int j = task.Result;
}
MessageBox.Show("运行完成");
}
private void button1_Click(object sender, EventArgs e)
{
Work();
}
private void button2_Click(object sender, EventArgs e)
{
Task.Run(() => Work());
}
}
}