线程视图
本文关键字:视图 线程 | 更新日期: 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时,你可能会遇到一些问题。