我希望循环中的变量输出1,2,3到我的列表框中。但它输出 2 2 2
出了什么问题?
C#代码
public partial class Tester : Form
{
public int test = 1;
............................
private void button1_Click(object sender, EventArgs e)
{
test++;
for (int i = 0; i < 3; i++)
{
Task t = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith(o =>
{
listBox1.Items.Add(test);
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
答案 0 :(得分:1)
如果您想知道完成任务的顺序,可以使用以下内容:
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
int tasknumber = test;
Task t = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
return tasknumber;
}).ContinueWith(o =>
{
listBox1.Items.Add(o.Result);
}, TaskScheduler.FromCurrentSynchronizationContext());
test++;
}
}
使用此代码,test
的值在每个循环结束时增加。在第一个任务中,任务编号为1.在第二个任务中,任务编号为2等。当任务完成后,结果将传递给ListBox。
您可能还想阅读有关StartNew的this blog。