我的一个winform窗体上有一进度条,目的是在执行一个方法的时候弹出来显示进度,但是如果用showdialog的话就无法继续执行方法,能不能异步调用showdialog?希望能给出示例代码,非常感谢!

解决方案 »

  1.   

    当然可以了,SlashScreen一般都是这么做的
    你用一个新的线程就可以了
    Thread th = new Thread(new ThreadStart(startSlash));
    void startSlash()
    {
       Form2 f = new Form2();
       f.ShowDialog();
    }
      

  2.   

    try..http://blog.csdn.net/knight94/archive/2006/05/27/757351.aspx引自愚翁大哥..
      

  3.   

    invoke解决的是当当前操作不在UI线程里面的时候,操作控件的问题,在这之前必须调用InvokeRequired来判断是否需要Invoke,如果不需要,直接执行某个操作空间的函数就可以了,否则需要Invoke,Invoke接受的是一个EventHandler实例。
    比如
    void OpControl()
    {    ---}那语句为
    if(control1.InvokeRequired)
    {
       MethodInvoker mi  = new MethodInvoker(OpControl);
       control1.Invoke(mi);
    }
    else
    {
       OpControl();
    }
      

  4.   

    我做的是一个COM组件,提供一个检查数据错误的方法,在这个方法中调用showdialog,异步调用该怎么调?
    private void checkerror()
    {
       //先初始化
       dialogform df = new dialogform();
       df.progressbar1.Maximum = max;
       df.showdialog();
       //执行检查
    }
    如此操作的话怎么做异步调用?
      

  5.   

    dialogform 
    必须有事件通知
    比如
    public delegate void CheckOne(Error e);
    public event CheckOne OnCheckOne;
    void onCheckOne(Error e)
    {
       if(OnCheckOne!=null)
       {
          OnCheckOne(e);
        }
    }在 dialogform 里面需要主界面更改process的方法里
    onCheckOne(..);
    -------------------------------
    private void checkerror()
    {
       //先初始化
       dialogform df = new dialogform();
       df.progressbar1.Maximum = max;
       df.showdialog();
       //执行检查
    }
    -----------------
    改成
    private void checkerror()
    {   Thread th = new Thread(new ThreadStart(tes));
       th.Start();
    }
    void tes
    {
      //先初始化
       dialogform df = new dialogform();
       df.progressbar1.Maximum = max;
       df.OnCheckOne+=...
       df.showdialog();
       //执行检查}
    然后在主界面中OnCheckOne中用Invoke
    --------------------------------
    如果你的ProcessBar在dialogform 中也一样,只不过事件写在MainForm中,然后通知dialogform 
      

  6.   

    楼主的意思,是用showlialog的窗体来呈现进度条界面的,然后等方法运行完了,showdialog这个窗体自动关闭掉
    估计楼主现在遇到的问题是,一旦showdialog后下面的代码就不运行了,所以楼主想用另开起一个线程来showdialog
    我也遇到到这样的问题了 现在可以开启新线程,但showlialog后的窗体就不是模式对话框了,就是后面的窗体还可以操作,现在问题我也没解决希望懂的人指点下 谢谢
      

  7.   

    已经解决
    http://topic.csdn.net/u/20101222/18/c24eee6d-e68f-45cd-907e-068e056ef5dc.html?seed=198845206&r=70769839#r_70769839