首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#跨线程对话协作

C#跨线程对话协作
EN

Stack Overflow用户
提问于 2010-04-15 23:28:48
回答 1查看 392关注 0票数 1

我正在看一个3.0版本的主要单线程的windows forms应用程序。最近,我的老板在一个单独的线程上添加了一个进度对话框,这样当主线程离开并执行一些繁重的工作并锁定GUI时,用户将看到一些活动。

除非用户切换应用程序或最小化,否则上面的效果很好,因为进度窗体位于最上面,不会随主应用程序一起消失。如果有许多小操作,这并不是那么糟糕,因为主窗体的事件结构在获得时间时会赶上它的事件,因此可以检查最小化和活动标志,从而对话线程可以相应地隐藏或显示自己。

但是,如果启动一个长时间运行的sql操作,则不会触发任何事件。我尝试过拦截WndProc命令,但是当一个长时间运行的sql操作正在执行时,它也显示为排队。我也尝试过选择进程,找到当前的应用程序,并检查进程线程中的各种内存值等,但在sql操作完成之前,这些都不会更新。当另一个应用程序激活时,移除最上面的应用程序会导致对话框消失,但如果主应用程序随后被取回,它将不会再次出现。

因此,我需要一种方法来找出另一个线程是否已最小化或不再活动,而不需要查询实际的线程,因为在sql操作完成之前,该线程会被锁定。

现在我知道这不是写这篇文章的最好方式,最好把所有繁重的处理放在单独的线程上,让GUI自由运行,但由于这是一个巨大的古老的遗留应用程序,不会提供以这种方式重写的时间,所以我必须使用我得到的东西。

任何帮助我们都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2010-04-15 23:37:33

听起来好像长时间运行的操作绑定到了进度对话框中?这通常是一个糟糕的想法,我想知道进展是否能显示出来。

但是,对于长时间运行的操作,您应该考虑使用BackgroundWorker。因此您的GUI (主窗体和进度对话框保持活动状态)。

这样,您应该能够将主窗体的最小化事件发送到进度对话框中,该对话框可以立即对其做出反应。

顺便说一句。BackgroundWorker支持自己的进度报告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2646665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档