滚动 frm = null;   // 窗体 frm 
        private void A()
        {            frm = new 滚动();            myIncrease = new IncreaseHandle(frm.Increase);
            frm.ShowDialog();        }        private void DoWork()
        {
            MethodInvoker mi = new MethodInvoker(A);
            this.BeginInvoke(mi);
            //this.Invoke(mi);
        }        private void button3_Click(object sender, EventArgs e)
        {
            ThreadStart myThreadDelegate = new ThreadStart(DoWork);
            Thread td = new Thread(myThreadDelegate);
            td.Start();// 问题: 为什么下面的循环不执行?我想实现: 滚动窗体frm.ShowDialog的同时,下面的循环执行。
            for (int i = 0; i < 1000; i++)
            {
                Application.DoEvents();
                Thread.Sleep(1);
                button3.Text = i.ToString();            }        }本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/knight94/archive/2006/05/27/757351.aspx

解决方案 »

  1.   

    一般情况下,UI是一个线程,后台的执行代码,是另外的线程.你把弹出模式窗口,放在单独的线程里,不合理!你可以用"frm.Show();"代替,而且把这个滚动窗体的ControlBox去掉,如果不行,把你的"滚动窗体"封装成一个控件,拖到当前表单,这样更好!
    ----------
    三易通软件(三易通服装进销存,三易通服装进销存软件,三易通服装进销存管理软件,三易通服装进销存管理系统,三易通服装店软件,三易通服装店管理软件,三易通服装店管理系统,三易通服装销售软件,三易通服装管理软件,三易通服装销售管理软件,三易通服装销售管理系统,三易通服装零售管理软件,三易通服装零售管理系统,三易通服装店收银软件)http://www.3etsoft.cn
      

  2.   

    to ydsunny:
    :)我也觉得这样不大合理,但是我UI的那个处理时间实在太久,而且牵涉很多变量,没法用线程代替。所以我才想做一个线程的 滚动frm.ShowDialog(); 当没处理完之前不能点父窗体,只能看着滚动frm 在不停的滚动。frm.Show();应该不可以,我需要没处理完之前不能点父窗体。"滚动窗体"封装成一个控件能说具体点吗?不是很明白,能实现 ShowDialog(); 吗?
      

  3.   

    楼主现在的代码问题是ShowDialog后,运行将卡在 frm.ShowDialog();这句上,模式窗体关闭才能继续执行。这本来就是模式窗体的特征。你可以试一试该称下面这样。 private void DoWork()
    {
    MethodInvoker mi = new MethodInvoker(SetText);
    this.BeginInvoke(mi);
    } void SetText()
    { for (int i = 0; i < 1000; i++)
    {
    Application.DoEvents();
    Thread.Sleep(1);
    button1.Text = i.ToString();
                            }
    }
    private void button3_Click(object sender, EventArgs e)
    {
     
    DoWork();//异步委托调用,更新主界面button文本
    A();     //显示模式窗体
                    }  
      

  4.   

    谢谢 zzx509,大家说的原理都是一样,时间长的执行放到线程里执行....
    但是我的代码放不了...
    结贴了,谢谢大家.