线程间的通讯问题
程序如下:private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(methodRun));
newThread.Start();
}
public void methodRun()
{
if (comboBox1.Text == "1")
{
label1.Text = "你选择的是1";
}
else { }
}
运行时,提示“线程间操作无效,从不是创建控件comboBox1的线程访问它”,
请问这是怎么回事啊?正确的写法应该是怎么样的?
我是新手,请大家帮帮忙! --------------------编程问答--------------------
--------------------编程问答-------------------- .net 2.0开始,控件只能由其创建的线程访问(通常即主线程或称UI线程)。 --------------------编程问答-------------------- 必须使用代理
delegate void UpdateLabel1Callback();
private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(methodRun));
newThread.Start();
}
public void methodRun()
{
if (this.InvokeRequired)
{
UpdateLabel1Callback d = new UpdateLabel1Callback(UpdateLabel1);
this.Invoke(d);
}
else
{
UpdateLabel1;
}
}
private void UpdateLabel1()
{
if (comboBox1.Text == "1")
{
label1.Text = "你选择的是1";
}
else { }
}
--------------------编程问答-------------------- 如何获得当前程序的线程总数? --------------------编程问答--------------------
--------------------编程问答-------------------- 能不能说详细点,我的意思是当前程序的线程总数如何获得,谢谢! --------------------编程问答-------------------- System.Diagnostics.Process.GetCurrentProcess().Threads.Count
System.Diagnostics.Process.GetCurrentProcess().Threads.Count
这就是当前程序的线程总数,你试了没~~ --------------------编程问答--------------------
--------------------编程问答-------------------- --------------------编程问答-------------------- 不会吧,我新建了一个程序,只添加了一个button,结果显示有12个纯程呢!
int threadcnt=System.Diagnostics.Process.GetCurrentProcess().Threads.Count ;
MessageBox.Show(threadcnt.ToString());
这是怎么回事啊,?
我的程序如下:
private void button1_Click(object sender, EventArgs e)
{
int threadcnt = System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
MessageBox.Show(threadcnt.ToString());
} --------------------编程问答-------------------- 不会吧,我新建了一个程序,只添加了一个button,结果显示有12个纯程呢!
不是应该只有一个线程的吗?
这是怎么回事啊,?
我的程序如下:
private void button1_Click(object sender, EventArgs e)
{
int threadcnt = System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
MessageBox.Show(threadcnt.ToString());
} --------------------编程问答-------------------- 显示12个线程很正常。
并不是你不另外开启线程就没有其他的线程,.net每个Application都有一个ThreadPool(线程池),.net内部许多的操作都会使用线程,应用程序加载之后就会线程池中就会创建一些线程来等待调用。
例如异步操作,当你调用某个Begin*****的方法时,就会通过ThreadPool来执行,虽然你没有显示开启线程。 --------------------编程问答-------------------- http://topic.csdn.net/u/20080331/16/498a9ef4-4631-4f4a-a6fc-16b72e17313a.html
补充:.NET技术 , C#