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