Dan*_*lba 6 .net c# background progress winforms
我正在开发一个C#操作,我想显示一个模态进度对话框,但只有当一个操作很长时(例如,超过3秒).我在后台线程中执行我的操作.
问题是我事先并不知道该操作是长还是短.
一些像IntelliJ的软件有一个计时器方法.如果操作时间超过x时间,则显示一个对话框.
你认为这是一个很好的模式来实现这个?
DoEvents()当我显示对话框时,我必须吗?这是我要做的:
1)使用BackgroundWorker。
2)在调用方法RunWorkerAsync之前,将当前时间存储在变量中。
3)在DoWork事件中,您需要调用ReportProgress。在ProgressChanged事件中,检查时间是否已超过三秒。如果是这样,请显示对话框。
这是BackgroundWorker的MSDN示例:http : //msdn.microsoft.com/zh-cn/library/cc221403(v=vs.95).aspx
注意:一般来说,我同意Ramhound的评论。只是总是显示进度。但是,如果您不使用BackgroundWorker,我将开始使用它。这会让您的生活更轻松。
我将选择这里的第一个选择并进行一些修改:
首先在不同的线程中运行可能长时间运行的操作。
然后运行另一个线程,通过等待句柄检查第一个状态,并超时等待其完成。如果超时触发,则会显示进度条。
就像是:
private ManualResetEvent _finishLoadingNotifier = new ManualResetEvent(false);
private const int ShowProgressTimeOut = 1000 * 3;//3 seconds
private void YourLongOperation()
{
....
_finishLoadingNotifier.Set();//after finish your work
}
private void StartProgressIfNeededThread()
{
int result = WaitHandle.WaitAny(new WaitHandle[] { _finishLoadingNotifier }, ShowProgressTimeOut);
if (result > 1)
{
//show the progress bar.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |