为了不让界面假死,我使用了backgroundworker。我在DoWork 中调用了一个外部重量级的对象A,程序就卡壳了,但是我把A的实例化放在DoWork 内,程序就没问题。如何在DoWork 访问外部的对象呢?(外部也要用到A,如果把A放到DoWork 内代码会有很大的冗余,呵呵,这也就是个线程间互相访问的问题吧)

解决方案 »

  1.   

    backgroundworker 有一个report事件。可以在dowork事件中抛出一个Int型数字和一个Object对象
    通过report事件实现异步。
      

  2.   

    你说的这个东西没有仔细研究过,你可以考虑使用多线程处理。考虑下面的代码:
    ThreadStart starter = delegate { yourMethod (bigA); };
    new Thread(starter).Start();
      

  3.   

    public void RunWorkerAsync (
    Object argument
    )
    把你的重量级的参数A传进去不行吗
      

  4.   

    worker.DoWork += new DoWorkEventHandler(worker_DoWork);只是个事件挂个方法。。怎么这么复杂?
      

  5.   

    backgroundworker 有一个ReportProgress事件。可以在dowork事件中抛出一个Int型数字和一个Object对象  public void RunWorkerAsync ( 
    Object argument 
    ) 再在dowork中将argument 传给backgroundworker.eportProgress 在它的事件中处理 argument