2014-12-30 53 views
0

我目前有一个表格,我正在使用。当用户按下导出按钮时,它将一些数据导出到Excel工作表中。我有这个过程发生在后台,它不会直观地向用户显示excel工作表,而是写在后面。c#消息框显示然后在进程后优雅关闭?

在c#表单上,当他们点击导出时,我禁用表单,以便它们不能按任何东西。我希望有一个消息框或某种形式的吐司/指示excel正在写入,并且当excel结束时,消息框/吐司/指示器关闭并允许用户继续。

此时表单被禁用,写入的excel表单被重新启用。我有一个消息框出现使用MessageBox.Show("text");,但它不是真的那么优雅,看起来以次充好。

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

谢谢, Ĵ

+0

这可能让你开始,如果它是敬酒你”重新寻找:http://www.codeproject.com/Ar ticles/442983/Android-Style-Toast-Notification-for-NET – DoctorMick

+0

@Rahul,我来看看这个,谢谢! –

+0

那么我没有发布任何评论或回答。请多谢@DoctorMick。 我从你的问题中得出的结论是,你想显示Excel正在写入的进度。您可以在状态栏中显示进度。由于你的表单只做一件事,即在Excel中编写,所以没有多重线程的问题。只需在状态栏中显示完成10%,完成20%等进度即可。 –

回答

0

您可以添加类似StatusBar的东西到您的窗体的底部而不是MessageBox。当导出开始时,您可以在该状态栏上的标签上显示信息,并在导出完成时将其删除。此外,您可以将进度条添加到指示导出进度状态的状态栏。

+1

这绝对听起来比消息框更整洁! –

0

我假定您正在运行该过程的用户界面线程而不是一个单独的工艺(一个单独的应用程序)?

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

+0

嗨,@msporek。 这个过程在excel上运行,我不担心阻塞用户界面,事实上我需要禁用它来防止用户更改写入数据所在的列表。我有消息框出现,后面跟着我的系统在后台运行的Microsoft Excel告诉它写什么,然后当它完成时,只出现在用户面前。用户点击消息框出现时,然后有一个禁用/启用的表单坐在那里,这取决于如何慢/快点击消息框确定选项。我宁愿有一个盒子出现在整个结尾。 –

+0

如果将它作为外部进程运行,那么您可能使用Process类来调用Excel操作,对吧?如果是这种情况,那么可以使用Process.WaitForExit()等待进程退出。看看这里:http://msdn.microsoft.com/pl-pl/library/fb4aw7b8%28v=vs.110%29.aspx – msporek

0

如果您不知道需要多长时间,可以使用等待/进度微调器,也可以结合使用行计数器,该计数器对于每行或每批1000行都有影响,具体取决于卷。这样用户可以看到它没有挂起,并且希望耐心地等待它完成。

看到这个职位:wpf loading spinner

0

感谢您的帮助,

我管理使用上递增赢形式的进度条,因为它写在我的系统,以精益求精,把工作进行到底古都出自己,目前排在Excel其写入是在进度条上的价值,一旦其完成,酒吧满,我隐藏了吧:)

Ĵ

相关问题