所有UI都是在UI主线程上的,因此你打开新的页面也是基于该主线程的。
你需要把报表内容读取运算放到多线程上去处理。

解决方案 »

  1.   

    我的是WINFORM,UI应该可以独立吧?
      

  2.   

    一些耗时的查询操作需要放到后台线程中去执行,UI线程就不会卡了,如果在后台线程(非UI线程)中操作UI控件,c#里面本身是不允许这种操作的,实际上还是要将处理UI的操作传递给UI线程去处理,你可以在需要操作UI的地方调用Control.Invoke方法,将操作转给UI线程处理
      

  3.   

    那如果我把数据获取放到后台线程去处理,我怎么知道它是否处理完了呢,还有它返回的数据我怎么送到到前面的UI里去?
    后台操作什么时候处理完,你不知道吗?? Control.Invoke 将UI操作交给UI线程处理,随便你怎么弄了
      

  4.   

    那如果我把数据获取放到后台线程去处理,我怎么知道它是否处理完了呢,还有它返回的数据我怎么送到到前面的UI里去?
    后台操作什么时候处理完,你不知道吗?? Control.Invoke 将UI操作交给UI线程处理,随便你怎么弄了
    后台是数据库那边的操作哦,那我还是要一直等待到从数据库返回吗?我这样做应该还是会卡住啊,而且线程返回的数据我不知道怎么处理
      

  5.   

    已经解决了,方法:
    Thread tr=new Thread(()=>
    {
       耗时的数据处理操作
    Invoke((ThreadStart)delegate()
    {
      和UI的操作
    });
    tr.Abort();
    });
    tr.Start();
      

  6.   

    CPU操作用线程,数据操作用异步