以上代码有些小误,但是能看出我的想法,如何实现我说的功能?是2个线程要不停依次刷新label,直到点击了button为止!!

解决方案 »

  1.   

    1.你要声明一个静态变量和它的公开属性static  string statustext
    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
    做对象传递
      

  2.   

    可以考虑是否使用TheadPool类来解决
      

  3.   

    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
      

  4.   

    另外的例子,
    使用多线程加载多个Xml文件到TreeView控件
    http://blog.csdn.net/zhzuo/archive/2004/06/10/22037.aspx