C# 中this.Invoke(delegate)与delegate.Invoke()区别

这篇具有很好参考价值的文章主要介绍了C# 中this.Invoke(delegate)与delegate.Invoke()区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在多线程运行中,想要更改UI控件的属性。一直认为两种方式是一样的,以前也是混着写的,这次翻车了。

this.Invoke(委托实例,参数)

这个是在拥有控件的基础窗口句柄的线程上,用指定的自变量列表执行指定委托。,也就是说通知UI线程处理事件,可跨线程。

委托实例.Invoke(参数)

这个是执行委托,运行在创建委托的线程中,不能跨线程使用。

委托与直接调用类public函数区别

1.相当于用方法作为另一方法参数(类似于C的函数指针)(没体会过优势
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托(常用
3.当不知道方法具体实现什么时使用委托,如:事件中使用委托(常用
4.解耦(应该算结构优化吧

总结

委托中涉及到UI中控件属性更改,则使用this.Invoke,其他情况使用delegate.Invoke文章来源地址https://www.toymoban.com/news/detail-401286.html

到了这里,关于C# 中this.Invoke(delegate)与delegate.Invoke()区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 中的Invoke 方法

    问题的引发: ?.Invoke()是什么意思。 答案如下: 同时又想到UI线程那块,也有invoke,区别是什么?故此总结如下: 在 C# 中,Invoke 方法可用于委托调用、控制 UI 线程操作和反射调用等多种情况。具体使用方法取决于上下文和所涉及的类型。 1、委托的 Invoke 方法:委托类型具有

    2024年02月13日
    浏览(37)
  • C#中的Invoke

    在 C# 中, Invoke() 是一个用于调用方法的方法,它能够在运行时动态地调用一个方法。 Invoke() 方法的使用方式有两种: 通过 MethodInfo 对象调用: 在上面的示例中,我们首先通过 typeof(MyStore).GetMethod(\\\"MyMethod\\\") 获取了 Open 方法的 MethodInfo 对象,然后使用 Invoke() 方法调用该方法。

    2024年02月14日
    浏览(45)
  • C#中的委托(Delegate)和事件 (Event)详解与使用范例

    最近天气晴雨不定,你因为害怕打游戏时忘记在下雨时收衣服或者在天晴时把衣服挂出去,于是你委托好友小明在天气发生变化时打电话通知你,这就是一种委托. 下面是这种委托的实例代码 以上代码的输出为 值得一提的是,如下代码为创建一个继承自Delegate类的名为XiaoMing的子类

    2023年04月12日
    浏览(41)
  • 面试常考:C# 委托(delegate、Action、Func、predicate)和事件

    刚开始工作的时候,觉得委托和事件有些神秘,而当你理解他们之后,也觉得好像没有想象中的那么难,这篇博文算是自己对委托和事件的一次梳理和总结。 C#中的委托,相当于C++中的指针函数,但委托是面向对象的,是安全的,是一个特殊的类,当然他也是引用类型,委托

    2024年02月16日
    浏览(45)
  • C#中的Dispatcher:Invoke与BeginInvoke的使用

    Dispatcher是.NET框架中的一个重要概念,用于处理异步消息传递。在C#中,Dispatcher提供了两种方法:Invoke和BeginInvoke,用于控制线程上消息的顺序和执行方式。 Dispatcher.Invoke方法用于同步执行消息。它确保在调用该方法时,当前线程上的消息队列中的消息会被依次处理。使用In

    2024年02月07日
    浏览(34)
  • 协程是怎么实现的,如何用纯C#怎么实现协程,携程和线程的区别

    协程(Coroutine)是一种特殊的函数,可以暂停执行并在稍后恢复执行。在Unity中,协程通常用于实现一些异步操作,如等待一段时间后再执行某个操作,或者分步执行一个复杂的操作。 在Unity中,协程可以使用C#的yield来实现。yield语句可以暂停协程的执行,并在稍后恢

    2024年02月04日
    浏览(47)
  • c++ 多线程: this_thread的使用

    在 C++11 中不仅添加了线程类,还添加了一个关于线程的命名空间 std::this_thread,在这个命名空间中提供了 四个公共的成员函数 ,通过这些成员函数就可以对当前线程进行相关的操作了 调用命名空间 std::this_thread 中的 get_id() 方法可以得到 当前 线程的 线程 ID ,函数原型如下

    2024年02月11日
    浏览(36)
  • C# this关键字的作用

    在C#中, this 有以下几种主要作用: 引用当前对象: this  用于引用当前类的实例。可以通过  this  来访问当前对象的成员变量、方法和属性。 区分字段与局部变量:当成员变量和局部变量同名时,可以使用  this  来区分。 在构造函数中调用其他构造函

    2024年02月22日
    浏览(50)
  • 【面试题04】static、$this、self 区别

    本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 在PHP中static、$this、self这三个都是用来访问类中的属性和方法,但它们之间却存在一些区别。在此,我们将会探讨这三个关

    2024年02月11日
    浏览(33)
  • vue进阶-vue-route中 this.$router 与 this.$route 的区别

    通过上章 📖vue进阶-vue-route 学习,我们发现路由的设置和获取会用到 this.$router 和 this.$route ,容易混淆,本章做下区分。 ✨ this.$router :访问 路由器 。是一个全局的路由器对象,包含了很多属性和对象(比如 history 对象),任何页面都可以调用其 push() 、 replace() 、 go() 等

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包