问题标签 [invoke]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4737 浏览

c# - 多个 Control.BeginInvoke/Invoke 调用会按顺序执行吗?

我需要知道 Control.BeginInvoke 和 Control.Invoke 调用是否会按照它们被调用的顺序执行。

我有以下情况:

  1. UI线程被阻塞
  2. WCF 线程调用 Control.BeginInvoke
  3. WCF 线程调用 Control.Invoke(或可能再次调用 BeginInvoke)
  4. UI线程未阻塞
  5. ??

步骤 1-4 的执行顺序保证按照显示的顺序(从技术上讲,不能保证顺序是那样的,但我的问题只有在顺序如图所示的情况下才相关)。

我的问题是,步骤 3 中的 Invoke/BeginInvoke 调用是否有可能在步骤 2 中的 BeginInvoke 调用之前执行?

另外,请不要评论阻​​塞 UI 线程。

0 投票
4 回答
780 浏览

c# - 查找和调用泛型重载方法

如何找到泛型重载方法?例如Queryable

我一直在寻找现有的解决方案,它们要么不够通用(基于方法的参数计数等),需要比我拥有的更多的参数(需要泛型类型定义或参数),要么就是完全错误(不要'不考虑嵌套泛型等)

我有定义类类型 — Type type、方法名称 —string name和参数类型数组(不是泛型定义) — Type[] types

到目前为止,似乎我必须通过将方法的(通用类型树?)与数组中的相应项.GetGenericArguments()进行比较来将每个预期方法映射到特定类型,从而推断出该方法的通用参数,所以我可以做到。.GetParameters ().Select (p=>p.ParameterType)types.MakeGenericMethod

对于这项任务来说,这似乎有点太复杂了,所以也许我想太多了。

有什么帮助吗?

0 投票
1 回答
242 浏览

c# - 检查 `object[] args` 是否满足 Delegate 实例?

我有以下方法签名:

委托和参数被保存到一个集合中以供将来调用。

有什么方法可以检查参数数组是否满足委托要求而不调用它?

谢谢。

编辑: 感谢反射实现,但我正在寻找一种内置的方法来做到这一点。我不想重蹈覆辙,.NET Framework 已经在某个地方的 Delegate.DynamicInvoke() 中实现了这种检查,实现处理所有只有微软开发人员才能考虑的疯狂特殊情况,并通过了单元测试和 QA。有没有办法使用这个内置的实现?

谢谢。

0 投票
5 回答
17831 浏览

c# - 调用和开始调用

您好,我正在用 C# 开发一些应用程序。目前我正在处理线程,我有一个问题在我脑海中。Invoke 和 BeginInvoke 有什么区别?我阅读了一些帖子,并在这里找到了一些有用的信息:这里

但是,以下代码中的 Invoke 和 BeginInvoke 有什么区别:

其中 MyDelegate 是对 MessageHandler 函数的引用。

我注意到使用 BeginInvoke lblStatus.Text 不会刷新使用 Invoke 刷新标签的位置。此外,我知道 Invoke 等待其执行完成。我感兴趣的最重要的案例是为什么在这种情况下刷新标签文本会有所不同。

0 投票
5 回答
267 浏览

c# - 从类中调用方法

我正在开发一个串口通信应用程序。我写了一个类。在串口的DataReceived事件中,我需要调用一个方法来做一些字符串操作。我想在另一个线程中进行这些操作。

但由于我的应用程序不是来自应用程序的窗口(它只是一个类),它没有Invoke().

那么,我怎样才能调用一个没有的类中的方法Invoke()呢?

谢谢

0 投票
1 回答
321 浏览

c# - 后台工作人员的问题

假设我有以下课程/表格(半伪):

当然,这是一个精炼版本,没有 BackgroundWorker 一切都很好,但因为我想要一个响应更快的 UI,所以我尝试实现一个。但是工作人员没有更新网格(而标签正确)。有小费吗?

0 投票
3 回答
399 浏览

c# - .NET 中的事件和多线程代码

项目是 C#。

所以我有一堆设计为作为库运行的多线程代码。它与 UI 位于一个单独的项目中。

我的库有一个中心对象,需要在创建任何会触发事件的东西之前创建它。

这个主对象是否可以在某些对象中传递,以便我的事件可以确定何时需要调用它们以返回主 UI 线程?

我真的很想让 UI 不必进行大量调用,因为他的事件处理程序几乎总是会从某个随机后台线程中调用。

0 投票
1 回答
540 浏览

.net - 即使使用调用方法,也会出现“跨线程操作无效”

我在这里得到“跨线程操作无效”:

调试告诉我 vlc 不需要调用。但是访问它的线程与创建它的线程不同。

我正在使用 libvlc.net 包装器播放声音,但问题不应该存在。我怎样才能摆脱这个异常?

我使用的是线程而不是后台工作者。

谢谢!

0 投票
3 回答
5294 浏览

c# - BackgroundWorker 还需要调用 Invoke 吗?

在最后一个问题中,在 C# 中做一些工作时显示进度条?,人们已经推荐使用BackgroundWorker。我认为在BackgroundWorkerDoWork 方法中您可以直接更新 GUI,但是为什么需要使用Invoke.

0 投票
2 回答
1807 浏览

c# - ConstructorInfo.Invoke 的 DynamicMethod,我需要考虑什么?

我的问题是这样的:

如果我要构建一个DynamicMethod对象,对应一个ConstructorInfo.Invoke调用,当我可以保证正确的类型时,我需要实现什么类型的 IL 以处理所有(或大多数)类型的参数在我拨打电话之前要传入多少个参数?


背景

我正在进行 IoC 容器的第三次迭代,目前正在做一些分析,以确定是否有任何区域可以轻松节省大量使用时间。

我注意到的一件事是,当解析为具体类型时,最终我会使用ConstructorInfo.Invoke调用构造函数,并传入我已经计算出的参数数组。

我注意到调用方法有相当多的开销,我想知道其中大部分是否只是我所做的相同检查的不同实现。

例如,由于我拥有的构造函数匹配代码,要为我传入的预定义参数名称、类型和值找到匹配的构造函数,这个特定的调用调用不可能最终得到它应该能够的东西以正确的顺序、正确的类型和适当的值来处理,例如正确数量的参数。

在执行包含对我的 resolve 方法的一百万次调用的分析会话,然后将其替换为模仿 Invoke 调用的DynamicMethod实现时,分析时间是这样的:

  • ConstructorInfo.Invoke:1973 毫秒
  • 动态方法:93ms

这约占此分析应用程序总运行时间的 20%。换句话说,通过将 ConstructorInfo.Invoke 调用替换为具有相同功能的 DynamicMethod,我能够在处理基本的工厂范围服务时减少 20% 的运行时间(即,所有解析调用都以构造函数调用结束)。

我认为这是相当重要的,并且值得仔细研究在这种情况下为构造函数构建一个稳定的 DynamicMethod 生成器需要做多少工作。

因此,动态方法将接受一个对象数组,并返回构造的对象,我已经知道有问题的 ConstructorInfo 对象。

因此,看起来动态方法将由以下 IL 组成:

还有什么我需要考虑的吗?

请注意,我知道在“减少访问模式”下运行应用程序时创建动态方法可能不可用(有时大脑不会放弃这些术语),但在这种情况下,我可以很容易地检测到这一点并且只是像以前一样调用原始构造函数,开销和所有。