问题标签 [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.
vb.net - Control.BeginInvoke 不适用于 TextBox.AppendText,跨线程
我想公开一种方法来更新带有消息的文本框作为状态日志。我想使用 AppendText 方法,但是在使用它时遇到了一个奇怪的多线程问题。我可以通过串联附加新消息就好了。该问题表现为文本框未显示,然后在关闭表单时出现跨线程访问错误。以下是有效和无效的示例:
工作但不像 AppendText 除非采取额外的步骤,这是最后的手段:
我想使用但不起作用的东西:
附加信息和更新:首先,我很抱歉可能没有预先提供足够的信息。
至少部分问题似乎是在调用AddMessage(newMessage)
之前实例化表单和调用,Show()
因为以下代码有效:
我总是可以做类似以下的事情,但我想知道发生了什么:)
另外我认为这不是很优雅......尤其是当我添加日志大小限制时
c# - 在调用表单的方法之前,可以在整个表单上使用 InvokeIfRequired 吗?
在 Winforms 中,
我有一个非 GUI 线程来监听传入的 UDP 消息。
当它接收到消息时,它会通过调用表单的方法之一来更新表单上的各种 UI 组件。
这显然是一种竞争条件。
似乎我想InvokeIfRequired
在每个组件上使用某种模式。
我是否可以只获得一个锁,而不是用InvokeIfRequired
人们似乎建议的数百个这样的条件和 lambda 来编写我的代码?我可以围绕对表单的单个调用引入线程安全调整,而不必修改表单代码的内部结构吗?
我正在运行的线程看起来像这样:
表格看起来像这样:
我希望只是在我的电话周围加上一些东西
gui.UpdateLotsOfGuiComponents();
。
c# - EndInvoke() 不返回(循环?死锁?)
我只是在玩一些来自Codeproject的简洁代码
控件有一个安全的调用方法:
场景 1:带有 WebBrowser 控件的 Windows 窗体应用程序。这个调用返回它应该返回的结果(返回的结果暂时不管,只是为了测试):
到目前为止,创建这个安全调用片段的人做得很好,做得很好。
场景 2:接下来我想运行一些单元测试来处理一些基于 WebBrowser 的东西。这个小测试将证明这一点:
这样,我就可以无限调用 SafeInvoke,更准确地说,它在此处结束:
你有暗示为什么调用永远不会结束吗?是不是因为我自制的 STA 线程?可能是与 NUnit 结合使用的控制台运行程序问题?
c# - 更新 UI 线程控件时,非 Invoke-Required 路径被命中
我有以下 Windows 窗体代码:
使用断点调试上述代码时,我观察到非调用所需的路径在第一次通过时被命中,但大约每 10 次运行只有一次。我很惊讶,因为代码在一个单独的线程上,而且我希望InvokeRequired
始终如此。有人可以阐明吗?
c# - InvokeRequired 到复选框
我只需要为复选框创建一个函数,该函数将返回复选框的当前值。
我写 :
这里有什么不好,有人可以正确地编写这个函数吗?我需要调用,因为没有调用就不能在另一个线程中使用。我只是搜索有关帮助的论坛和网络,但在任何地方都找不到解决方案。
c# - 如何在 C# 中调用多个控件
我有一个 C# 程序似乎在随机时间卡住了,在随机一段时间后它自行恢复了!当它卡住时,我可以看到内存增长,当它恢复时,内存使用量就下降到正常水平。CPU使用率似乎一直正常,没有文件被写入或读取(按设计)。
该程序调用外部(第 3 方)DLL 函数与硬件通信,并从运行在不同线程上的 DLL 回调更新 UI。我检查了代码,除了以下代码(已编辑)之外没有发现任何可疑之处:
我想知道这是否是从另一个线程更新 UI 元素的正确方法?如果没有,如何修改?
事实上,我调用了 6 个标签和另一种形式(可选)。大多数时候它似乎工作正常,但偶尔会卡住。出于明显的原因,我无法在此处发布所有代码,而只是试图从我最怀疑的地方进行故障排除。
在此先感谢您的任何建议!
c# - C# Lambda 方法在访问 Winforms UI 控件时不抛出异常
在下面的示例中,当调用 Tag1_changed 和 Tag2_changed 方法时,它们需要调用表单来更新控件,否则将引发异常。但是,当对回调参数使用 lambda 方法时,this.InvokeRequired 的计算结果为 true,但控件仍会更新,并且即使未使用表单的 MethodInvoker,也不会引发异常。为什么 (pnlHeartbeat.BackColor) 语句在执行时不抛出异常?
SubscibeToTagAsync 方法签名是:
回调 Action 存储在 OnChange 属性中,并最终以下列方式执行:
c# - 数据网格视图:System.InvalidOperationException:'跨线程操作无效:控件''
我试图找到解决此问题的方法,但我没有找到或不知道,我是 C# 新手
我找到了很多谈论(调用)的解决方案,但我不知道如何在我的代码上修复它们,如果找到的一切都只是标签或文本框的解决方案,如果可能的话解决问题
“System.InvalidOperationException:'跨线程操作无效:控制''从创建它的线程以外的线程访问。'”
c# - 有没有办法在 Xamarin 中实现或使用调用/线程?
首先:我对 Xamarin 很陌生,所以这听起来很愚蠢。我需要将 ac#-programm“重写”为 Xamarin(如:我编写了一个 Computerprogramm,现在我必须为它编写一个 android-app。我正在使用 Android-App(Xamarin)。)。到目前为止,一切都很好,但我遇到了线程问题 - MethodInvoker、InvokeRequire 等。我该如何处理?考虑到异步,我有点希望有比异步任务更简单的方法。任务是另一种选择?
例如这个短代码:
c# - 为什么 Form.Close 等待 MessageBox.Show?
请看这个:
form.Close
之前MessageBox.Show
,但form
在关闭 msgBox 之前不会关闭,请帮忙。
- 结尾 -
全部在代码中,为什么需要更多的单词?全部在代码中,为什么需要更多的单词?全部在代码中,为什么需要更多的单词?