问题标签 [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 回答
28032 浏览

c# - 从 C# 应用程序调用 ASP.net Web 服务

我有个问题。如何调用 Web 服务并从 C# 桌面应用程序获取结果。我正在制作一个桌面应用程序,我希望它能够连接到我的在线 ASP.net Web 服务。这怎么可能?

0 投票
5 回答
49397 浏览

c# - 调用任何跨线程代码的最佳方式?

我知道以前有人问过这个问题,但我正在寻找一种方法:

  1. 简化安全跨线程代码的创建。
  2. 在任何情况下重用此代码(无 Windows 窗体引用)。

这是我到目前为止所拥有的,但我想删除 Windows 窗体引用。有任何想法吗?

上面的类可以这样使用:

如何删除 SafeInvoke 类中的 System.Windows.Forms.Control 但保留相同的功能?

0 投票
3 回答
9152 浏览

c# - 扩展 Control 以提供始终安全的 Invoke/BeginInvoke 功能是否合适?

在维护严重违反 winforms 中的跨线程更新规则的旧应用程序的过程中,我创建了以下扩展方法,以在发现非法调用时快速修复它们:

示例用法:

我也喜欢如何利用闭包来读取,尽管在这种情况下 forceSynchronous 需要为真:

我不质疑这种方法对修复遗留代码中的非法调用的有用性,但是新代码呢?

当您可能不知道哪个线程正在尝试更新 ui 时,使用此方法更新新软件中的 UI 是否是一个好的设计,或者新的 Winforms 代码通常应该包含一个特定的、专用的方法以及适当的Invoke()相关管道所有这些用户界面更新?(当然,我会先尝试使用其他合适的后台处理技术,例如 BackgroundWorker。)

有趣的是,这不适用于ToolStripItems。我最近才发现它们直接来自Component而不是来自Control。相反,ToolStrip应该使用包含的调用。

评论的跟进:

一些评论表明:

应该:

考虑以下msdn 文档

这意味着 如果不需要 Invoke(调用发生在同一个线程上),或者如果控件是在不同的线程上创建但尚未创建控件的句柄,则 InvokeRequired 可以返回 false 。

在尚未创建控件句柄的情况下,不应简单地调用控件上的属性、方法或事件。这可能会导致在后台线程上创建控件的句柄,从而在没有消息泵的线程上隔离控件并​​使应用程序不稳定。

当 InvokeRequired 在后台线程上返回 false 时,您还可以通过检查 IsHandleCreated 的值来防止这种情况。

如果控件是在不同的线程上创建的,但尚未创建控件的句柄,则InvokeRequired返回 false。这意味着如果InvokeRequired返回trueIsHandleCreated将始终为真。再次测试它是多余的和不正确的。

0 投票
4 回答
5639 浏览

c# - 使用 Invoke 从 C# 中的不同线程访问类成员

注意:系列的一部分:C#:从另一个类访问表单成员以及如何在 C# 中从另一个 cs 文件访问表单对象


你好,

这个想法是在 TCP 客户端接收/发送数据包时使用备忘录通知用户。

经过几次修复,最合适的解决方案似乎是这个

就是这样称呼的

但是,由于不安全的线程调用,调用代码会引发异常。我在msdn找到了解决方案,但我似乎无法获得他们在那里使用的方法。

这是我的翻拍,没用。

错误:

参数“1”:无法从“方法组”转换为“System.Delegate”

参数“2”:无法从“字符串”转换为“对象 []”

基本上,我正在尝试使用 Invoke 从另一个线程访问备忘录(或者更有可能是在备忘录中添加文本)。我以前从未使用过它,也许这就是我误解我的错误的原因。

0 投票
2 回答
2246 浏览

.net - 涉及 TopMost 和 Invoke 的 Z-Order 问题

我正在使用 Form.ShowDialog() 显示对话框。表单设置为 TopMost。一些图像处理计算在后台异步执行。它们的结果由 Invoke 以主要形式呈现。到现在为止还挺好。奇怪的是,模态对话框时不时地移动到主窗体后面。我想当构建对话框的消息被 Invoke 以某种方式“干扰”时会发生这种情况。

任何想法如何解决这个问题?

0 投票
4 回答
3827 浏览

c# - Richtextbox.invoke, C#, Form 仍然挂起

我已经编写了 ac# 应用程序来运行外部程序,并且我已经将它的输出重定向到我的表单中的富文本框。我使用以下设置创建了流程

并在 outputreceived 事件中

现在问题是虽然它正在工作,但是如果应用程序的输出很大,我包含文本框的主表单会挂起。我认为每次调用调用都会导致重新绘制表单,这种情况经常发生。是否有任何替代方法可以让我看到文本框的更新,并保持表单完全激活?


更新:

我想我得到了答案,我BeginInvoke在应该使用的时候使用了Invoke.


更新1:

我尝试了 BeginInvoke 和 Suspendlayout 但它没有给我所需的功能,发生的情况是该过程已将所有标准输出恢复到字符串,但负责更新文本的线程正在花费自己的时间来打印数据. 我可以对它做点什么吗?

0 投票
2 回答
25784 浏览

c# - C#如何使用多个参数调用

我使用下面的代码访问表单上的属性,但今天我想将内容写入 ListView,这需要更多参数。

如何添加多个参数以及如何使用它们(值,值)?

0 投票
3 回答
1368 浏览

c# - 如何使用 Invoke 访问表单属性,但在 C# 中使用对象参数?

我无法最好地描述我的问题的标题,对不起。目前,我使用 Invoke 访问表单上的属性,它运行良好,但我对每个属性都有一个函数,这很不舒服。

这些功能中的每一个看起来都是这样的

我的问题是,我不能那样做吗

绝对不是那样,我想不出更多的面向对象的东西,但是与其用相同的代码编写大量函数,我不能通过传递我想更改的对象来使用一个吗?

0 投票
6 回答
7472 浏览

c# - 不管 InvokeRequired 调用 Invoke 有什么问题?

我已经看到了对 GUI 控件的跨线程访问的常见设置,例如这里讨论的: Shorest way to write a thread-safe access method to a windows forms control

我发现的所有网络点击都描述了类似的事情。

但是,为什么我们需要检查 InvokeRequired?我们不能直接调用 Invoke 吗?

我认为答案是否定的,所以我真正的问题是“为什么”?

0 投票
1 回答
1861 浏览

c# - 如何停止处理进一步的事件

与 KeyPress 事件类似,我希望订阅该事件的人能够在我的 EventArgs 类中设置 e.Handled。如果它们返回 true,我不再想继续触发事件。任何想法如何实现这一点?现在,这是我的方法:

据我了解,每个订阅该事件的人都会收到通知,因此设置 e.Handled = true; 在这里不会有任何影响。