110,571
社区成员
发帖
与我相关
我的任务
分享
private void button1_Click(object sender, EventArgs e)
{
ProFrm GetDataProFrm = new ProFrm(true)
{ Minimum = 0, Maximum =100, Title = "处理进度" };
for (int i = 0; i < 100; i++)
{
int K = i;
Task.Run(() =>
{
DoSomething(K);
GetDataProFrm.Progress_Add(K.ToString());
});
}
}
private void button2_Click(object sender, EventArgs e)
{
List<Task> Tsk = new List<Task>();
ProFrm GetDataProFrm = new ProFrm(true)
{ Minimum = 0, Maximum = 100, Title = "处理进度" };
for (int i = 0; i < 100; i++)
{
int K = i;
Tsk.Add(Task.Run(() =>
{
DoSomething(K);
GetDataProFrm.Progress_Add("123");
}));
}
Task.WaitAll(Tsk.ToArray());
}
private void button2_Click(object sender, EventArgs e)
{
Task.Run(() =>
{
List<Task> Tsk = new List<Task>();
ProFrm GetDataProFrm = new ProFrm(true)
{ Minimum = 0, Maximum = 100, Title = "处理进度" };
for (int i = 0; i < 100; i++)
{
int K = i;
Tsk.Add(Task.Run(() =>
{
DoSomething(K);
GetDataProFrm.Progress_Add("123");
}));
}
Task.WaitAll(Tsk.ToArray());
});
}
private async void button1_Click_1(object sender, EventArgs e)
{
this.progressBar1.Maximum = 100;
Progress<int> meProgress = new Progress<int>(p => this.progressBar1.Value = p);
await doProgress(meProgress);
MessageBox.Show("你说要进度条走完,然后再走一步,这里就是下一步,他走完才弹出来");
}
private async Task doProgress(IProgress<int> meProgress)
{
int count = 0;
var tasks= Enumerable.Range(1, 100).Select(p => { return doSomething(p).ContinueWith(c =>
{
Interlocked.Increment(ref count);
meProgress.Report(count);
}); });
await Task.WhenAll(tasks);
}
private Random rand = new Random(DateTime.Now.Millisecond);
public async Task doSomething(int i)
{
//模拟一个耗时间操作
await Task.Delay(rand.Next(100, 1001));
Trace.WriteLine(i);
}
private async void button1_Click_1(object sender, EventArgs e)
{
this.progressBar1.Maximum = 100;
Progress<int> meProgress = new Progress<int>(p => this.progressBar1.Value = p);
await doProgress(meProgress);
MessageBox.Show("你说要进度条走完,然后再走一步,这里就是下一步,他走完才弹出来");
}
private async Task doProgress(IProgress<int> meProgress)
{
int count = 0;
//直接plinq并行,没必要弄个Task.run
foreach (var i in Enumerable.Range(1,100).AsParallel())
{
await doSomething(i);
//并行操作没有顺序,你需要保证他的原子性
Interlocked.Increment(ref count);
meProgress?.Report(count);
}
}
private Random rand = new Random(DateTime.Now.Millisecond);
public async Task doSomething(int i)
{
//模拟一个耗时间操作,故意给随机,是告诉你,你得任务并行执行,但是他其实是随机结束,并不按你循环顺序
await Task.Delay(rand.Next(100, 1001));
}
for (int i = 0; i < 100; i++)
{
await Task.Run(()=>{
// TODO 处理逻辑
});
// TODO 执行其它操作。。。
}
private async void button2_Click(object sender, EventArgs e)
{
List<Task> Tsk = new List<Task>();
ProFrm GetDataProFrm = new ProFrm(true)
{ Minimum = 0, Maximum = 100, Title = "处理进度" };
for (int i = 0; i < 100; i++)
{
int K = i;
Tsk.Add(Task.Run(() =>
{
DoSomething(K);
GetDataProFrm.Progress_Add("123");
}));
}
await Task.WhenAll(Tsk.ToArray());
}
TaskFactory taskFactory = new TaskFactory();//创建TaskFactory工厂
taskFactory.ContinueWhenAll(Tsk.ToArray(), tArray => //这行代码不会卡住主线程,执行完100个任务后会回调
{
this.Invoke(new Action(btnConnEnd));// 利用主线程暴露的委托方法来更新UI,btnConnEnd是方法,你更新UI的方法
});
private async void button2_ClickAsync(object sender, EventArgs e)
{
List<Task> Tsk = new List<Task>();
ProFrm GetDataProFrm = new ProFrm(true)
{ Minimum = 0, Maximum = 100, Title = "处理进度" };
await Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
int K = i;
DoSomething(K);
GetDataProFrm.Progress_Add("123");
}
});
Console.WriteLine("此处会在最后输出");
}