WPF“DoEvents”:如何实现它?

时间:2014-11-07 10:13:48

标签: c# .net wpf dispatcher doevents

我在" DoEvents"中找到了这两个实现。方法:

解决方案1:

System.Windows.Application.Current.Dispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Background,
       new System.Threading.ThreadStart(() => { }));

解决方案2:

System.Windows.Application.Current.Dispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Background,
       new System.Action(delegate { }));

你能解释一下这两种实现之间有什么区别,哪种最适合使用?

感谢。

2 个答案:

答案 0 :(得分:1)

他们都是代表,当你的事件执行需要完成时,它会在满足你的标准时启动事件(例如,在达到执行和调度程序优先级背景的情况下) 它们只是您可以参考的两种不同的实现方式

What is the difference between Delegate & Action in C#

或msdn获取信息

http://msdn.microsoft.com/en-us/library/system.threading.threadstart(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/system.action(v=vs.110).aspx

答案 1 :(得分:1)

除了语法之外,两种解决方案之间没有区别。 ThreadStartAction都是具有相同声明且只有名称不同的委托:

public delegate void ThreadStart();
public delegate void Action();

您也可以创建自己的委托,并使用相同的方式,例如:

public delegate void MyOwnAction();
...
Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Background, new MyOwnAction(() => { }));

您也可以使用特定方法,而不是匿名方法:

private void Target()
{
    ...
}

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Background, new MyOwnAction(Target));