public partial class Form1 : Form
{
private delegate void LoadDataDelegate(string value);
private object obj = new object();
public Form1()
{
InitializeComponent();
}
private void LoadData(string value)
{
if (label1.InvokeRequired)
{
this.Invoke(new LoadDataDelegate(LoadData), value);
}
else
label1.Text = value;
}
private void button1_Click(object sender, EventArgs e)
{
List<string> data = new List<string>();
for (int i = 0; i < 100000; i++)
{
data.Add(Guid.NewGuid().ToString());
}
Thread thread = new Thread(new ThreadStart(() =>
{
Task[] tasks = new Task[data.Count];
for (int i = 0; i < data.Count; i++)
{
var value = i + "______" + data[i];
tasks[i] = Task.Factory.StartNew(() =>
{
//这里要加个锁,因为异步在这里的时候,不加锁还是会卡界面
lock (obj)
{
LoadData(value);
}
});
}
Task.WaitAny(tasks);
}));
thread.IsBackground = true;
thread.Start();
}
}