当前位置: 首页 > 编程语言 > C#

使用C#MethodInvoker.Invoke()获取GUI应用程序...行吗?Share

时间:2023-04-10 13:15:02 C#

使用C#MethodInvoker.Invoke()来获得一个GUI应用程序......好吗?使用C#2.0和MethodInvoker委托,我有一个GUI应用程序,它从GUI线程或工作线程接收一些事件。我使用以下模式来处理表单中的事件:};如果(InvokeRequired)BeginInvoke(方法);否则方法.Invoke();通过使用这种模式,我并没有复制实际的UI代码,但我不确定这种方法是否合适。特别是method.Invoke()行是使用另一个线程进行调用,还是转换为直接调用GUI线程上的方法?method.Invoke()调用在当前执行的线程上执行委托。使用BeginInvoke(method)确保在GUI线程上调用委托。当从GUI线程和其他线程调用相同的方法时,这是避免代码重复的正确方法。我个人喜欢这种方法:privatevoidExecuteSecure(Actiona){if(InvokeRequired)BeginInvoke(a);否则一个();然后你可以像这样写一个单行代码:ExecuteSecure(()=>this.Enabled=true);请记住,如果您在后台线程中并且Control.IsHandleCreated为false,则Control.InvokeRequired将返回false。我会用Debug.Assert保护代码以检查非托管句柄的创建。对于WinForms,调用Control.Invoke(Delegate)将消息发送到UI的thead的消息泵。然后线程处理消息并调用委托。处理后,Invoke停止阻塞,调用线程继续运行您的代码。它在同一个线程上进行调用。您可以通过单步执行代码来检查。这种方法没有错。C#学习教程就是这些:使用C#MethodInvoker.Invoke()获取GUI应用程序...好吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: