主窗体,子窗体使用不同的线程防止相互影响卡顿

解决子窗体进行大数据查询时主窗体卡顿的问题

主窗体:

        private void DataCollect_Load(object sender, EventArgs e)
        {

            //显示当前的线程   效果代码  实际项目不需要
            int threadId = Thread.CurrentThread.ManagedThreadId;
            this.Text = threadId.ToString();

        }

子窗体:  窗体名称Quary

 private void Quary_Load(object sender, EventArgs e)
        {

           //显示当前的线程   效果代码  实际项目不需要
            int threadId = Thread.CurrentThread.ManagedThreadId;
            this.Text = threadId.ToString();

        }

主窗体点击打开子窗体按钮   打开Quary窗体


 

        private void 汇总查询ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form f = Application.OpenForms["Quary"];
            if (f == null)  //没打开过
            {
                // 新建了一个线程
                Thread t = new Thread(()=>OpenForm()); 
                // 加上这句话!不然可能提示DragDrop 注册失败。 
                //在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。
                //请确保您的 Main 函数带有 STAThreadAttribute 标记。
                t.SetApartmentState(ApartmentState.STA);
                t.Start();
            }
            else
            {
                this.Invoke((EventHandler)delegate
                {
                    f.Focus();
                    f.Activate();
                });
            }
        }

        private void OpenForm()
        {
            Application.Run(new Quary());
        }

                //退出系统(其他线体的窗体可能在开启中,必须使用这个退出)
                System.Environment.Exit(0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanwenhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值