模态进度对话框 - 如何传递委托?
Modal Progress Dialog - How to pass in delegate?
我有一个带进度条的基本表单,我想传入这样的委托:
ProgressDialog.ShowAndExecute(delegate);
我不知道如何将委托连接到进度消息。
void ShowAndExecute()
{
// Handle form disabling and whatnot...
thread = new Thread(new ThreadStart(ExecuteCommand));
while (thread.IsAlive)
{
Application.DoEvents();
Thread.Sleep(100);
}
}
// Example of the method I would like to pass in
void ExecuteCommand()
{
for (int i = 0; i < 10; i++) Thread.Sleep(1000);
}
我想创建一个命令应该实现的接口。他们可以在更新发生时触发事件,但我如何让调用线程知道它已被触发?
您如何处理传递通过事件报告进度并根据这些事件采取行动(移动进度条)的委托?这是一个静态对话框(为了更容易在整个应用程序中调用)
只有ExecuteCommand
知道它当前的进度。因此必须将某些接口或 class 传递给 ExecuteCommand
方法。 ExecuteCommand
将设置进度,然后由侦听器的实现来确定如何处理进度。通常,侦听器会检查它是否正在进行重大更改**,如果是,它将 BeginInvoke
调用以更新进度条。
** - 如果您在短时间内处理数千个项目,那么您要防止过度调用 BeginInvoke
,否则它会锁定 UI 线程。
void ExecuteCommand(IThreadController tc)
{
for (int i = 0; i < 10; i++) {
Thread.Sleep(1000);
tc.setProgress("processing ...", (i+1), 10);
}
}
我有一个带进度条的基本表单,我想传入这样的委托:
ProgressDialog.ShowAndExecute(delegate);
我不知道如何将委托连接到进度消息。
void ShowAndExecute()
{
// Handle form disabling and whatnot...
thread = new Thread(new ThreadStart(ExecuteCommand));
while (thread.IsAlive)
{
Application.DoEvents();
Thread.Sleep(100);
}
}
// Example of the method I would like to pass in
void ExecuteCommand()
{
for (int i = 0; i < 10; i++) Thread.Sleep(1000);
}
我想创建一个命令应该实现的接口。他们可以在更新发生时触发事件,但我如何让调用线程知道它已被触发?
您如何处理传递通过事件报告进度并根据这些事件采取行动(移动进度条)的委托?这是一个静态对话框(为了更容易在整个应用程序中调用)
只有ExecuteCommand
知道它当前的进度。因此必须将某些接口或 class 传递给 ExecuteCommand
方法。 ExecuteCommand
将设置进度,然后由侦听器的实现来确定如何处理进度。通常,侦听器会检查它是否正在进行重大更改**,如果是,它将 BeginInvoke
调用以更新进度条。
** - 如果您在短时间内处理数千个项目,那么您要防止过度调用 BeginInvoke
,否则它会锁定 UI 线程。
void ExecuteCommand(IThreadController tc)
{
for (int i = 0; i < 10; i++) {
Thread.Sleep(1000);
tc.setProgress("processing ...", (i+1), 10);
}
}