线程视图

本文关键字:视图 线程 | 更新日期: 2023-09-27 18:03:07

我试图在列表框中显示一个包含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());
    }

唯一的事情是我得到一个错误在行MyList.Add(字符串。Format(" temperature {0}", i));。我的错误是系统类型的异常。在s00107997.exe中发生了NullReferenceException,但未在用户代码中处理。有人能看出我错在哪里吗?

线程视图

你必须在你的表单中分配你的全局变量而不重写你的变量名。另外,不要使用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());
}

如果您想在表单中执行这样的任务,我建议您使用Timer。它在WinForms中作为你自己的线程得到了更好的支持。当从另一个线程访问WinForm时,你可能会遇到一些问题。