作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写一个小的 GUI 程序,它可以完成一些工作并在之后退出。工作完成后,GUI 线程会更新用户的信息。
这是我目前使用的模式,我认为它不是最优雅的模式:
static void MainForm_Loaded(BeoExport exporter)
{
// Thread 1 runs the Export
workerThread = new Thread(() =>
{
exporter.StartExport();
// don't exit immediately, so the user sees someting if the work is done fast
Thread.Sleep(1000);
});
// Thread 2 waits for Thread 1 and exits the program afterwards
waiterThread = new Thread(() =>
{
workerThread.Join();
Application.Exit();
});
workerThread.Start();
waiterThread.Start();
}
那么你会使用什么模式/机制来做同样的事情?
澄清一下:我对更新 GUI 线程的方法不感兴趣。那已经完成了。这听起来可能很深奥,但我一直在寻找退出应用程序的正确方法。
如果可以的话,我会把功劳归功于 Dave,因为他指出了 BackgroundWorker 的用处。
最佳答案
您是否考虑过使用 BackgroundWorker
线程?您可以使用它的 ReportProgress
方法和 ProgressChanged
事件来更新 GUI(可能带有进度条),假设您可以重构 BeoExport.StartExport
方法也报告进度。这为用户提供了工作实际发生的可见反馈。
关于c# - "Do some work and quit"的最佳模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770163/
我是一名优秀的程序员,十分优秀!