winform多线程问题,在线等.... 以上代码有些小误,但是能看出我的想法,如何实现我说的功能?是2个线程要不停依次刷新label,直到点击了button为止!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.你要声明一个静态变量和它的公开属性static string statustextpublic static string StatusText{get;set;}2.窗体间的线程刷新label1.text最好是用委托delegate void settxt(string txt);public void setlable(string txt){if(lable1.InvokeRequered){settxt str= new settxt(setlable);lable1.Invoke(str,new object[]{txt});}else{label1.text=txt;}}因为windows消息机制和winform单线程单元不容许窗体控件跨线程调用,因此,当你想跨窗体线程调用control,应当使用线程安全的方式---委托setlable(StatusText);3.你的错误一、二都是你使用static的用法还没搞很明白简单点就是静态方法必须使用静态变量,否则必须new 一个对象label1不是静态的,也最好不要设置成静态的,所以你可以用static string statustext做对象传递 可以考虑是否使用TheadPool类来解决 LZ的代码明显存在问题,为什么大家不指出,继续误导他。--你ssa和cc方法都是不同与UI线程的方法,不是UI线程的方法不能直接操作UI元素,结果LZ做了,比如this.label1.Text = "Thread Text 1";this.label1.Text = "Thread Text 2";//如果真要修改需要通过Control.Invoke或Control.BeginInvoke方法来做。关于这一点给你两篇文件参考。通过多线程为基于 .NET 的应用程序实现响应迅速的用户http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx为Windows应用创建简单的异步调用模式http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx如果需要长时间执行独立线程,建议楼主使用BackgroundWorker来做。下面两篇文件我对BackgourndWorker实现原理和应用进行了分析。使用BackgroundWorker组件进行异步操作编程http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx实现增强的异步任务执行组件http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx 另外的例子,使用多线程加载多个Xml文件到TreeView控件http://blog.csdn.net/zhzuo/archive/2004/06/10/22037.aspx 如何判断两个时间相减的结果大于30分钟? 一个非常低级的问题,因为一直没有碰到过. 在窗体最小化后,过了一段时间,想点击窗体,让它弹起来,却发现它逝世(吊死)了~~怎么回事!顶者有分~ C#操作EXCEL 引入组件库后编译报错 猜数字代码问题 我自己写的下载器codeproject上的代码无法下载, 但是迅雷可以下. 是什么原因, 已经登陆 C#图像处理的简单问题,请求高手解答 怎么获得iis的路径 求:在5个数中取4个数的排列。并把排列结果输出。。。 Textbox如何禁止它记忆以前曾经输入过的值? 如何获得cpu的温度 怎么样在C#应用 程序里的登陆后窗体后的隐藏
public static string StatusText
{
get;set;
}2.窗体间的线程刷新label1.text
最好是用委托delegate void settxt(string txt);public void setlable(string txt)
{
if(lable1.InvokeRequered)
{
settxt str= new settxt(setlable);
lable1.Invoke(str,new object[]{txt});}
else
{
label1.text=txt;}
}因为windows消息机制和winform单线程单元不容许窗体控件跨线程调用,
因此,当你想跨窗体线程调用control,应当使用线程安全的方式---委托setlable(StatusText);3.你的错误一、二都是你使用static的用法还没搞很明白简单点就是静态方法必须使用静态变量,否则必须new 一个对象label1不是静态的,也最好不要设置成静态的,所以你可以用
static string statustext
做对象传递
--你ssa和cc方法都是不同与UI线程的方法,不是UI线程的方法不能直接操作UI元素,结果LZ做了,比如
this.label1.Text = "Thread Text 1";
this.label1.Text = "Thread Text 2";
//
如果真要修改需要通过Control.Invoke或Control.BeginInvoke方法来做。关于这一点给你两篇文件参考。
通过多线程为基于 .NET 的应用程序实现响应迅速的用户
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx如果需要长时间执行独立线程,建议楼主使用BackgroundWorker来做。下面两篇文件我对BackgourndWorker实现原理和应用进行了分析。
使用BackgroundWorker组件进行异步操作编程
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
实现增强的异步任务执行组件
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx
使用多线程加载多个Xml文件到TreeView控件
http://blog.csdn.net/zhzuo/archive/2004/06/10/22037.aspx