Control.BeginInvoke来自单线程

时间:2016-05-17 15:06:19

标签: .net winforms

关于Windows窗体控件上存在的Control.BeginInvoke方法,我有一个非常简单的问题。传递给此方法的委托是否总是以与插入它们相同的顺序执行?

示例:

// Can I safely assume that the assignment of "3" to 
// 'label1.Text' will allways be last?
BeginInvoke(new Action(() => { label1.Text = "1"; });
BeginInvoke(new Action(() => { label1.Text = "2"; });
BeginInvoke(new Action(() => { label1.Text = "3"; });

请注意,我不必担心多个线程调用'BeginInvoke',这是一个正在处理这个问题的场景:Control.BeginInvoke Execution Order。我只关心当'BeginInvoke'调用来自单个线程时是否有任何执行顺序保证。

如果有人能指出我确认此行为的官方消息来源,我会很高兴收到它。现在我只有这个帖子:https://social.msdn.microsoft.com/forums/windows/en-us/4f6d7b0f-8b43-44db-bc27-eea13303cc40/controlbegininvoke-multiple-times-execution-order?forum=winforms,其中包括以下内容声明:

  

Control.BeginInvoke使用窗口消息循环和幕后队列。委托在入口调用BeginInvoke的队列中排队,但插入循环的消息会盲目地从队列中出列下一个委托并在UI线程上调用它。

任何帮助将不胜感激!

0 个答案:

没有答案