线程变量问题

时间:2014-10-17 08:00:11

标签: c# task-parallel-library

我希望循环中的变量输出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());

            }

        }

1 个答案:

答案 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