【发布时间】:2010-10-12 22:27:11
【问题描述】:
我变得有点懒了(有时这很好)并开始通过调用回调而不先检查 InvokeRequired 来更新 WinForms UI。
是否有我应该注意的性能问题或注意事项?
private delegate void SetStatusEventHandler(string statusMessage);
private void SetStatus(string statusMessage)
{
Invoke((MethodInvoker) (() =>
{
resultLabel.Text = statusMessage;
}));
// - vs -
if (InvokeRequired)
{
SetStatusEventHandler cb = SetStatus;
Invoke(cb, statusMessage);
}
else
{
resultLabel.Text = statusMessage;
}
}
[编辑]:大多数情况下,调用“invoke”的方法最多会被调用,例如每秒 10 到 20 次,中间间隔很宽.
[UPDATE]采用以下扩展方法解决
public static class SmartInvoker
{
public static void InvokeHandler(this Control control, MethodInvoker del)
{
if (control.InvokeRequired)
{
control.Invoke(del);
return;
}
del();
}
}
...
private void SetStatus(string statusMessage)
{
this.InvokeHandler(() => resultLabel.Text = statusMessage);
}
我想找出如何管理扩展方法类是我需要深入研究的另一个主题。谢谢你的帮助
【问题讨论】:
标签: c# winforms performance user-interface