问题标签 [invokerequired]

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 投票
1 回答
431 浏览

vb.net - Control.BeginInvoke 不适用于 TextBox.AppendText,跨线程

我想公开一种方法来更新带有消息的文本框作为状态日志。我想使用 AppendText 方法,但是在使用它时遇到了一个奇怪的多线程问题。我可以通过串联附加新消息就好了。该问题表现为文本框未显示,然后在关闭表单时出现跨线程访问错误。以下是有效和无效的示例:

工作但不像 AppendText 除非采取额外的步骤,这是最后的手段:

我想使用但不起作用的东西:

附加信息和更新:首先,我很抱歉可能没有预先提供足够的信息。

至少部分问题似乎是在调用AddMessage(newMessage)之前实例化表单和调用,Show()因为以下代码有效:

我总是可以做类似以下的事情,但我想知道发生了什么:)

另外我认为这不是很优雅......尤其是当我添加日志大小限制时

0 投票
0 回答
393 浏览

c# - 在调用表单的方法之前,可以在整个表单上使用 InvokeIfRequired 吗?

在 Winforms 中,
我有一个非 GUI 线程来监听传入的 UDP 消息。
当它接收到消息时,它会通过调用表单的方法之一来更新表单上的各种 UI 组件。

这显然是一种竞争条件。
似乎我想InvokeIfRequired在每个组件上使用某种模式。

我是否可以只获得一个锁,而不是用InvokeIfRequired人们似乎建议的数百个这样的条件和 lambda 来编写我的代码?我可以围绕对表单的单个调用引入线程安全调整,而不必修改表单代码的内部结构吗?

我正在运行的线程看起来像这样:

表格看起来像这样:

我希望只是在我的电话周围加上一些东西 gui.UpdateLotsOfGuiComponents();

0 投票
1 回答
121 浏览

c# - EndInvoke() 不返回(循环?死锁?)

我只是在玩一些来自Codeproject的简洁代码

控件有一个安全的调用方法:

场景 1:带有 WebBrowser 控件的 Windows 窗体应用程序。这个调用返回它应该返回的结果(返回的结果暂时不管,只是为了测试):

到目前为止,创建这个安全调用片段的人做得很好,做得很好。

场景 2:接下来我想运行一些单元测试来处理一些基于 WebBrowser 的东西。这个小测试将证明这一点:

这样,我就可以无限调用 SafeInvoke,更准确地说,它在此处结束:

你有暗示为什么调用永远不会结束吗?是不是因为我自制的 STA 线程?可能是与 NUnit 结合使用的控制台运行程序问题?

0 投票
1 回答
46 浏览

c# - 更新 UI 线程控件时,非 Invoke-Required 路径被命中

我有以下 Windows 窗体代码:

使用断点调试上述代码时,我观察到非调用所需的路径在第一次通过时被命中,但大约每 10 次运行只有一次。我很惊讶,因为代码在一个单独的线程上,而且我希望InvokeRequired始终如此。有人可以阐明吗?

0 投票
2 回答
744 浏览

c# - InvokeRequired 到复选框

我只需要为复选框创建一个函数,该函数将返回复选框的当前值。

我写 :

这里有什么不好,有人可以正确地编写这个函数吗?我需要调用,因为没有调用就不能在另一个线程中使用。我只是搜索有关帮助的论坛和网络,但在任何地方都找不到解决方案。

0 投票
1 回答
1327 浏览

c# - 如何在 C# 中调用多个控件

我有一个 C# 程序似乎在随机时间卡住了,在随机一段时间后它自行恢复了!当它卡住时,我可以看到内存增长,当它恢复时,内存使用量就下降到正常水平。CPU使用率似乎一直正常,没有文件被写入或读取(按设计)。

该程序调用外部(第 3 方)DLL 函数与硬件通信,并从运行在不同线程上的 DLL 回调更新 UI。我检查了代码,除了以下代码(已编辑)之外没有发现任何可疑之处:

我想知道这是否是从另一个线程更新 UI 元素的正确方法?如果没有,如何修改?

事实上,我调用了 6 个标签和另一种形式(可选)。大多数时候它似乎工作正常,但偶尔会卡住。出于明显的原因,我无法在此处发布所有代码,而只是试图从我最怀疑的地方进行故障排除。

在此先感谢您的任何建议!

0 投票
0 回答
64 浏览

c# - C# Lambda 方法在访问 Winforms UI 控件时不抛出异常

在下面的示例中,当调用 Tag1_changed 和 Tag2_changed 方法时,它们需要调用表单来更新控件,否则将引发异常。但是,当对回调参数使用 lambda 方法时,this.InvokeRequired 的计算结果为 true,但控件仍会更新,并且即使未使用表单的 MethodInvoker,也不会引发异常。为什么 (pnlHeartbeat.BackColor) 语句在执行时不抛出异常?

SubscibeToTagAsync 方法签名是:

回调 Action 存储在 OnChange 属性中,并最终以下列方式执行:

0 投票
1 回答
186 浏览

c# - 数据网格视图:System.InvalidOperationException:'跨线程操作无效:控件''

我试图找到解决此问题的方法,但我没有找到或不知道,我是 C# 新手

我找到了很多谈论(调用)的解决方案,但我不知道如何在我的代码上修复它们,如果找到的一切都只是标签或文本框的解决方案,如果可能的话解决问题

“System.InvalidOperationException:'跨线程操作无效:控制''从创建它的线程以外的线程访问。'”

错误信息图片

0 投票
0 回答
118 浏览

c# - 有没有办法在 Xamarin 中实现或使用调用/线程?

首先:我对 Xamarin 很陌生,所以这听起来很愚蠢。我需要将 ac#-programm“重写”为 Xamarin(如:我编写了一个 Computerprogramm,现在我必须为它编写一个 android-app。我正在使用 Android-App(Xamarin)。)。到目前为止,一切都很好,但我遇到了线程问题 - MethodInvoker、InvokeRequire 等。我该如何处理?考虑到异步,我有点希望有比异步任务更简单的方法。任务是另一种选择?

例如这个短代码:

0 投票
1 回答
432 浏览

c# - 为什么 Form.Close 等待 MessageBox.Show?

请看这个:

form.Close之前MessageBox.Show,但form在关闭 msgBox 之前不会关闭,请帮忙。

- 结尾 -

全部在代码中,为什么需要更多的单词?全部在代码中,为什么需要更多的单词?全部在代码中,为什么需要更多的单词?