.NET2005 使用线程对控件进行访问的问题
访问控件的时候提示我:线程间操作无效:从不是创建控件“lstMyList”的线程访问它。请问如何在2005里面如何跨线程来调用窗体控件?我的代码如下:(2003里面是可以...
访问控件的时候提示我:线程间操作无效: 从不是创建控件“lstMyList”的线程访问它。
请问如何在2005里面如何跨线程来调用窗体控件?
我的代码如下:(2003里面是可以用的)
(Form1 里面有一个listbox 和 一个button)
public Form1()
{
InitializeComponent();
}
private Thread th;
private void btnStart_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(run));
th.Start();
}
private void run()
{
int sum = 0;
for (int i = 1; i <= 9000; i++)
{
sum += i;
this.lstMyList.Items.Add(sum.ToString());
this.lstMyList.SelectedIndex = this.lstMyList.Items.Count - 1;
Thread.Sleep(100);
}
} 展开
请问如何在2005里面如何跨线程来调用窗体控件?
我的代码如下:(2003里面是可以用的)
(Form1 里面有一个listbox 和 一个button)
public Form1()
{
InitializeComponent();
}
private Thread th;
private void btnStart_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(run));
th.Start();
}
private void run()
{
int sum = 0;
for (int i = 1; i <= 9000; i++)
{
sum += i;
this.lstMyList.Items.Add(sum.ToString());
this.lstMyList.SelectedIndex = this.lstMyList.Items.Count - 1;
Thread.Sleep(100);
}
} 展开
1个回答
展开全部
使用委托,更改后的代码如下:
private Thread th;
private void run()
{
int sum = 0;
for (int i = 1; i <= 9000; i++)
{
sum += i;
setList sl = new setList(SetList);
this.Invoke(sl,sum.ToString()); //调用窗体来执行委托
Thread.Sleep(100);
}
}
delegate void setList(string s); //创建一个委托
void SetList(string s) //setList委托的实例
{ //在委托中处理事件
this.lstMyList.Items.Add(s);
this.lstMyList.SelectedIndex = this.lstMyList.Items.Count - 1;
}
厚道就要给分啊~
^_^
private Thread th;
private void run()
{
int sum = 0;
for (int i = 1; i <= 9000; i++)
{
sum += i;
setList sl = new setList(SetList);
this.Invoke(sl,sum.ToString()); //调用窗体来执行委托
Thread.Sleep(100);
}
}
delegate void setList(string s); //创建一个委托
void SetList(string s) //setList委托的实例
{ //在委托中处理事件
this.lstMyList.Items.Add(s);
this.lstMyList.SelectedIndex = this.lstMyList.Items.Count - 1;
}
厚道就要给分啊~
^_^
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询