问题是这样:
   我的程序调用一个存储过程,此存储过程的主要任务是处理当前月份数据并执行一些相关操作。存储过程在执行中会向一个日志表中插入数据,表示当前处理到什么地方,目的是在程序过程执行中我在前台页面中用另外一个线程来访问这个表获取存储过程插入的记录并将其显示到页面上。
  我在程序中的处理过程是这样:调用存储过程->启动线程获取最新信息并显示。
  现在这样处理的话在程序运行中就会提示:label控件属于主线程之类,其它线程无法访问的问题。  我很少使用线程,对线程处理掌握不多。借此机会向大家请教一下。
  问题:一、多线程中如何实现这种一个线程获得信息然后让另外一个线程显示?
        二、不错的线程知识的文章大家有的给发个连接  谢谢

解决方案 »

  1.   

    1.最简单的方法是设置一个全局变量,多个线程都可以读取。
    2. MSDN上有例子的
      

  2.   

    UI 控件是例外,另外一个Thread不能访问当期Thread的UI控件,除非设置了对应的属性;我的做法一般是,让主线程来处理UI,后台跑工作进程。
    当然,如果不是额外的工作线程,可以使用ThreadPool.Jeffery的最新的那本书<CLR Via C#>这方面介绍得超级详细...
      

  3.   

    谢谢楼上
    一、我设置了全局变量。给全局变量赋值是没有问题。问题是将这个值要通过标签显示出来时有了上面说的问题。
    UI 控件是例外,另外一个Thread不能访问当期Thread的UI控件,除非设置了对应的属性:请问是什么属性?这个属性是控件的还是谁的?
      

  4.   

    hehe 
    label写成public的 直接给他的属性赋
      

  5.   

    可以参考一下愚翁的blog:
    http://blog.csdn.net/Knight94/archive/2006/08/24/1111267.aspx
      

  6.   

    在窗体load的时候加入这个属性
     CheckForIllegalCrossThreadCalls=false; 命名空间
    System.windows.form
      

  7.   

    现在这样处理的话在程序运行中就会提示:label控件属于主线程之类,其它线程无法访问的问题。这个问题的答案然后第二个 
    http://www.codeproject.com/csharp/#Threads
      

  8.   

    现在这样处理的话在程序运行中就会提示:label控件属于主线程之类,其它线程无法访问的问题。http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx?mfr=true
      

  9.   

    通过调用所在窗体的Invoke或者BeginInvoke来调用对控件的操作,如下:
    void Main() {
      new Thread(new TreadStart(ProcessData)).Start();
    }
    void ProcessData() {
      // do some data process
      
      Invoke(new MethodInvoke(ProcessControl));
    }void ProcessControl() {
      // do some control process
    }