c# – 简单加载表单/线程
发布时间:2020-12-15 17:16:12 所属栏目:百科 来源:网络整理
导读:在遗留应用程序中,我们有一个winform,在按钮单击时执行代码时锁定…好吧它不会锁定它只是“停止响应”,直到代码执行. 将下面的代码包装到一个单独的线程并在执行时显示加载窗口(frmLoading)的最佳方法(最少量的代码和工作方式)是什么?我知道这应该相对简单,
在遗留应用程序中,我们有一个winform,在按钮单击时执行代码时锁定…好吧它不会锁定它只是“停止响应”,直到代码执行.
将下面的代码包装到一个单独的线程并在执行时显示加载窗口(frmLoading)的最佳方法(最少量的代码和工作方式)是什么?我知道这应该相对简单,但我尝试了一些尚未完成的不同事情. private void btnSynch_Click(object sender,EventArgs e) { btnSynch.Enabled = false; if(chkDBSynch.Checked) PerformDBSyncronization(); if(chkAppSynch.Checked) PerformApplicationSyncronization(); btnSynch.Enabled = true; } 编辑: private void btnSynch_Click(object sender,EventArgs e) { btnSynch.Enabled = false; frmLoading loadingWindow = new frmLoading(); loadingWindow.Show(); BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s,args) => { Thread.Sleep(6000); //TODO:just for testing if(chkDBSynch.Checked) PerformDBSyncronization(); if(chkAppSynch.Checked) PerformApplicationSyncronization(); }; bw.RunWorkerCompleted += (s,args) => { loadingWindow.Close(); }; bw.RunWorkerAsync(); btnSynch.Enabled = true; } 解决方法
我觉得很傻……主要形式后面出现了装载形式,这就是为什么我认为它没有打开.我将TopMost属性设置为true,一切都按预期工作.
编辑: Why use a owner window in MessageBox.Show? 我最终得到的代码看起来像 frmLoading loadingWindow = new frmLoading(); loadingWindow.Show(this); BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s,args) => { this.Invoke(new MethodInvoker(() => this.Enabled = false)); if(chkDBSynch.Checked) PerformDBSyncronization(); if(chkAppSynch.Checked) PerformApplicationSyncronization(); }; bw.RunWorkerCompleted += (s,args) => { loadingWindow.Close(); this.Invoke(new MethodInvoker(() => this.Enabled = true)); }; bw.RunWorkerAsync(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |