本帖最后由 yxy10072510329 于 2010-08-23 09:46:52 编辑

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
            {
                Thread th = new Thread(new ThreadStart(SubFormShowDialog));
                th.SetApartmentState(ApartmentState.MTA);
                th.Start();
            }        private void SubFormShowDialog()
            {
                //if (this.InvokeRequired)
                //    this.BeginInvoke(new MethodInvoker(SubFormShowDialog));
                //{
                    Form sf = new Form();
                    sf.ShowDialog();
                //}
            }这样就是一个了。
      

  2.   

    zylhx2002 解决了窗口重复问题,谁帮解决一下卡死问题啊,是不是 th.Start(); 后面的循环导致的卡死(一直到循环结束才正常)
      

  3.   

    这样写会好一点。
    private  void calcu()
    {
    StatusForm form = null;
    new Thread((ThreadStart)delegate
    {
    form = new StatusForm();
    Application.Run(form);
    }).Start();
    while(form == null);//等待线程启动成功,窗体创建好,避免后续操作太快,窗体没创建立刻要释放的情况。
    where(bool)
    {
            //。这里是读取一个文件夹所有文件的代码,并记录当前读了多少个文件到全局静态变量,供多进程的winform使用
    }
    form.Invoke((EventHandler)delegate{form.Close();});
    }