【问题标题】:Windows Forms GUI StuckWindows 窗体 GUI 卡住
【发布时间】:2010-09-29 09:36:30
【问题描述】:

假设您正在向一个旧且正在运行的 Windows 窗体应用程序添加一项功能,现在整个应用程序在一个线程中运行,并且该应用程序非常大并且有许多窗体,因此您无法将其折射以在多线程中运行,现在是应用程序gui freeze 每次你制作一个进程时,有没有办法在它冻结时显示它的加载或正在进行?无需更改软件的整体设计以支持线程等?

顺便说一句,我不希望它停止冻结它可以冻结我只是希望它表明它正在做某事!

任何想法将不胜感激,谢谢...

【问题讨论】:

  • 您正在忽略所有合理的答案。这确实需要您卷起袖子开始工作。
  • 我没有拒绝回答汉斯,当我发布这个问题时,我想知道除了这些方法之外是否还有其他方法,这就是为什么我明确表示我不想重写应用程序,显示“等待/加载”的这个功能并不紧急,所以如果它不适用,我可以。感谢任何方式

标签: c# windows multithreading user-interface


【解决方案1】:

如果应用程序是使用 .net 2.0 或更高版本编写的,请参阅 BackGroundWorker 组件。

【讨论】:

  • 但使用后台工作人员将迫使我更改整个应用程序,将所有使 gui 冻结的进程添加到后台工作人员,然后添加进度条或其他东西,这是不适用的,我不希望应用程序停止冻结!我只想在不更改整个应用程序的情况下显示等待或加载的内容
【解决方案2】:

您可以在开始长时间运行的操作时将表单的Cursor 属性设置为Cursors.WaitCursor,并在完成时将其重置为Cursors.Default。当您的操作执行时,您可以调用Application.DoEvents(),但如果同时触发其他事件,它可能会导致副作用。

【讨论】:

  • 那么我将不得不遍历整个应用程序并在所有这些方法之前编写该代码并在所有这些方法之后将其更改回来,我想我的问题不适用
  • @Stacker - 我给你的是一个快速且非常肮脏的解决方案来解决你的问题。 @saurabh 提出的解决方案更优雅,更不容易出错。即使涉及重写,也可以为更好的响应式应用付出很小的代价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
相关资源
最近更新 更多