c#消息框显示然后在进程后正常关闭?

时间:2014-12-30 14:35:17

标签: c# winforms process messagebox

我目前有一张我正在使用的表格。当用户按下导出按钮时,它会将一些数据导出到Excel工作表。我在后台进行了这个过程,并且在写入时它并没有在视觉上向用户显示excel工作表,但是在之后。

在c#表单上,当他们点击导出时,我禁用表单,以便他们不能按任何内容。我希望有一个消息框或excel正在编写的某种toast / indication,当excel完成时,消息框/ toast / indicator关闭并允许用户继续。

在禁用表单时,写入excel,然后重新启用表单。我有一个使用MessageBox.Show("text");的消息框,但它并不是那么优雅而且看起来很糟糕。

有没有人做过类似的事情,可以指出我正确的方向。

谢谢, Ĵ

4 个答案:

答案 0 :(得分:0)

我假设您运行的进程位于用户界面Thread而不是单独的Process(单独的应用程序)?

你应该这样跟进。首先显示MessageBox或其他对话框(您可以使用自己设计的形式)。然后,您可以使用BackgroundWorker类/ Thread来初始化耗时的工作。这样就不会阻止UI线程。最后,当工作完成后,关闭对话框。

答案 1 :(得分:0)

您可以在表单底部添加类似StatusBar的内容,而不是MessageBox。导出开始后,您可以在该状态栏上显示标签上的信息,并在导出完成后将其删除。此外,您可以向该状态栏添加进度条,以指示导出进度的状态。

答案 2 :(得分:0)

如果您不知道需要多长时间,请使用等待/进度微调器,可能与行计数器组合使用,根据卷的不同,每行或每批1000行都会出现问题。这样,用户可以看到它没有挂起,并且应该耐心地等待它完成。

请参阅此帖子:wpf loading spinner

答案 3 :(得分:0)

感谢您的帮助,

我最终使用win表单上的进度条设置了自己的工作,当它通过我的系统写入excel时递增,其写入的excel中的当前行是进度条上的值,一旦完成,酒吧已经满了,我隐藏吧:)

Ĵ