【问题标题】:c# message box show then gracefully close after a process?c#消息框显示然后在一个进程后优雅地关闭?
【发布时间】:2015-02-26 17:28:04
【问题描述】:

我目前有一个我正在使用的表格。当用户按下导出按钮时,它会将一些数据导出到 Excel 工作表。我有这个过程在后台发生,它不会在写作时直观地向用户显示 excel 工作表,但会在之后显示。

在 c# 表单上,当他们单击导出时,我禁用了表单,这样他们就无法在其上按任何内容。我希望有一个消息框或某种 toast/指示 excel 正在编写,当 excel 完成时,消息框/toast/indicator 关闭并允许用户继续。

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

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

谢谢, J

【问题讨论】:

  • 如果您正在寻找吐司,这可能会让您开始:codeproject.com/Articles/442983/…
  • @Rahul,我会看看这个,谢谢!
  • 好吧,我还没有发表任何评论或回答。请感谢@DoctorMick。我从你的问题中假设是你想展示 Excel 正在编写的进度。您可以在状态栏中显示进度。由于您的表单只做一件事,即用 excel 编写,因此没有必要做多线程。只需在状态栏中显示进度,例如完成 10%、完成 20%...。
  • 啊抱歉,我没有注意到你的编辑不是建议。无论如何,感谢您的编辑,并感谢@DoctorMick 的建议:)

标签: c# winforms process messagebox


【解决方案1】:

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

【讨论】:

  • 这听起来绝对比消息框更简洁!
【解决方案2】:

我假设您正在运行的进程在用户界面线程上,而不是一个单独的进程(一个单独的应用程序)?

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

【讨论】:

  • 嗨,@msporek。该过程在 excel 上运行,我不担心会阻塞 UI,实际上我需要禁用它以防止用户更改写入数据所在的列表。我让消息框出现,然后 Microsoft Excel 在后台运行,我的系统告诉它要写什么,然后当它完成后,它只是出现在用户面前。用户在消息框出现时单击它,然后有一个禁用/启用的表单就坐在那里,这取决于单击消息框 OK 选项的慢/快。我宁愿在整个过程中出现一个框,最后关闭。
  • 如果你把它作为一个外部进程运行,那么你可能使用Process类来调用Excel操作,对吧?如果是这种情况,那么您可以使用 Process.WaitForExit() 等待进程退出。看这里:msdn.microsoft.com/pl-pl/library/fb4aw7b8%28v=vs.110%29.aspx
【解决方案3】:

如果您不知道需要多长时间,请使用等待/进度微调器,可能与行计数器结合使用,该计数器会根据数量为每行或每批 1000 行增加一次。通过这种方式,用户可以看到它没有挂起,并希望耐心等待它完成。

看到这个帖子:wpf loading spinner

【讨论】:

    【解决方案4】:

    感谢您的帮助,

    最后,我设法自己解决了问题,栏已满,我隐藏栏:)

    J

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      相关资源
      最近更新 更多