Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程列表视图_C#_Multithreading_Winforms - Fatal编程技术网

C# 线程列表视图

C# 线程列表视图,c#,multithreading,winforms,C#,Multithreading,Winforms,我试图在一个列表框中显示一个包含10个项目的列表,一旦达到该限制,列表框就会自动清除,线程再次开始。以下是我目前掌握的代码: List<string> MyList { get; set; } public Form1() { InitializeComponent(); List<string> MyList = new List<string>(); var bw = new B

我试图在一个列表框中显示一个包含10个项目的列表,一旦达到该限制,列表框就会自动清除,线程再次开始。以下是我目前掌握的代码:

    List<string> MyList { get; set; }

    public Form1()
    {
        InitializeComponent();

        List<string> MyList = new List<string>();

        var bw = new BackgroundWorker();
        bw.DoWork += (sender, args) => MethodToDoWork();
        bw.RunWorkerCompleted += (sender, args) => MethodToUpdateControl();
        bw.RunWorkerAsync();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();

        this.Hide();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        lbxPosition.Items.Clear();
    }

    private void MethodToDoWork()
    {
        for (int i = 0; i < 10; i++)
        {
            MyList.Add(string.Format("Temprature {0}", i));
            Thread.Sleep(100);
        }
    }

    private void MethodToUpdateControl()
    {
        lbxPosition.Items.AddRange(MyList.ToArray());
    }
List MyList{get;set;}
公共表格1()
{
初始化组件();
List MyList=新列表();
var bw=新的BackgroundWorker();
bw.DoWork+=(发送方,参数)=>MethodToDoWork();
bw.RunWorkerCompleted+=(发送方,参数)=>MethodToUpdateControl();
RunWorkerAsync();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Form2 frm2=新的Form2();
frm2.Show();
this.Hide();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
lbxPosition.Items.Clear();
}
私有void MethodToDoWork()
{
对于(int i=0;i<10;i++)
{
Add(string.Format(“Temprature{0}”,i));
睡眠(100);
}
}
私有void方法更新控制()
{
lbxPosition.Items.AddRange(MyList.ToArray());
}

唯一的问题是我在MyList.Add(string.Format(“Temprature{0}”,I))行中得到一个错误。我的错误是s00107997.exe中发生的“System.NullReferenceException”类型的异常,但未在用户代码中处理。有人知道我哪里出错了吗?

如果您想在表单内部执行任务,我建议您使用计时器。它在WinForms中作为自己的线程得到更好的支持。从另一个线程访问WinForm时,您可能会遇到许多问题。

您必须在表单中分配全局变量,而无需重新写入变量名称。此外,不要使用Thread.Sleep

List<string> MyList { get; set; }

public Form1()
{
    InitializeComponent();

    MyList = new List<string>(); //Here was wrong.

    var bw = new BackgroundWorker();
    bw.DoWork += (sender, args) => MethodToDoWork();
    bw.RunWorkerCompleted += (sender, args) => MethodToUpdateControl();
    bw.RunWorkerAsync();

}

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.Show();

    this.Hide();
}

private void Form1_Load(object sender, EventArgs e)
{
    lbxPosition.Items.Clear();
}

private void MethodToDoWork()
{
    for (int i = 0; i < 10; i++)
    {
        MyList.Add(string.Format("Temprature {0}", i));
    }
}

private void MethodToUpdateControl()
{
    lbxPosition.Items.AddRange(MyList.ToArray());
}
List MyList{get;set;}
公共表格1()
{
初始化组件();
MyList=new List();//这里是错误的。
var bw=新的BackgroundWorker();
bw.DoWork+=(发送方,参数)=>MethodToDoWork();
bw.RunWorkerCompleted+=(发送方,参数)=>MethodToUpdateControl();
RunWorkerAsync();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Form2 frm2=新的Form2();
frm2.Show();
this.Hide();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
lbxPosition.Items.Clear();
}
私有void MethodToDoWork()
{
对于(int i=0;i<10;i++)
{
Add(string.Format(“Temprature{0}”,i));
}
}
私有void方法更新控制()
{
lbxPosition.Items.AddRange(MyList.ToArray());
}

表单级变量MyList从未分配给,并且将
null
。在构造函数中,声明一个实例化的
变量MyList。