问题标签 [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.
c# - 多线程,访问UI控件
我有一个简单的应用程序,带有通常的 UI 线程和后台工作人员,在后台工作人员中我需要动态创建 LinkLabels 并将它们放置在 FlowLayoutPanel 中。为此,我需要将 LinkLabel 的父级设置为 FlowLayoutPanel。
这是我目前拥有的一段代码,但是,我在“l.Parent = panel;”行上得到了臭名昭著的“跨线程操作无效”
我对多线程操作相当陌生,但我认为我正确地调用了,但显然不是。有什么建议么?
c# - 我的 InvokedRequired 会发生什么?
我的代码有什么问题??
为什么它不去真实的陈述?
c# - 在 .Net 2.0 的 Property 的 getter 中不使用 Func 调用
我想在getter中使用Invoke,使用.Net 2.0而不是4.0时怎么做?对于 .Net > 2.0,我们可以使用Func
.Net 2.0 的替代品是什么?
这是 .Net 4.0 的示例(来自链接)
c# - GetContentsRichTextBox() 返回类型错误
我正在尝试编写一种从另一个线程读取富文本框内容的方法。下面是我的代码:
但是我收到以下错误消息:
'string WindowsFormsApplication1.frmMain.ObtainContentsRichTextBox()' 的返回类型错误
我确定我做错了一些简单的事情,但我有点 C# 新手。谁能指出我做错了什么?
c# - BeginInvoke 会阻塞 UI,而 Invoke 不会。!
我对跨线程访问遇到的场景感到困惑。这是我正在尝试做的事情:
主 UI 线程 - 菜单项单击我创建了一个后台工作程序并异步运行它
方法ExecuteTheActionSelected
如下:
有localBackgroundWorker_DoWork
:
Execute
该类中的方法具有方法调用程序,该方法调用程序实际上调用 UI 线程中的事件处理程序:
UI 事件处理程序如下:
现在出现了跨线程问题:
这里Invoke 不会阻塞 UI,因为 BeginInvoke 会阻塞。请帮助我理解这种情况,因为我很困惑。
vb.net - 更新时单独表单上的进度条冻结/崩溃
我有一个奇怪的异常,我似乎无法调试。对于任何要建议工作线程的人,我都被禁止在工作中使用它们......我问自己为什么不这样做,并收到一个模糊的答案和明确的指示来避免它......无论如何......
我决定我想在一个单独的表单上有一个进度条,该表单被初始化并直接从我的库类中显示(独立于主表单并在不同的线程上执行)。即使此类初始化表单本身,我仍然使用 control.InvokeRequired 和 control.Invoke,因此我可以在其他地方重用该表单。以下是用于初始化进度条:
现在对于阶跃函数:
现在以下是我启动包含进度条的表单然后发送步骤调用的测试代码:
到目前为止一切顺利......您会注意到,每次调用 step 方法时,我都会为进度条表单调用 Form.Refresh 方法。我最终这样做了,因为当表单启动时,它会在几个进度条步骤后崩溃。在这个时间点,表单确实显示而没有崩溃(因为刷新),除非我单击它崩溃的表单(并且 Visual Studio 没有捕获到异常)。奇怪的是,库类中用于更新进度条的代码继续没有任何问题,就好像问题只是与 Win32 窗口有关。这是与崩溃相关的 Windows 消息:
描述:一个问题导致该程序停止与 Windows 交互。问题签名:问题事件名称:AppHangB1 应用程序名称:DL_RDS_Sort.vshost.exe
我尝试从主表单线程启动表单,但结果相同。我不知道发生了什么......任何帮助将不胜感激=D
更新事物的确切调用方式:
从 MainForm 开始,线程以库类中定义的子例程的地址开始:
然后在这个线程的例程中,我正在测试表单的初始化并调用我为更新性能栏属性而编写的方法(如前所示):
请注意,测试区域后面还有更多代码,但它从未被调用,并且不会在此问题中发挥作用,因为我退出了子例程。我通常使用 ShowDialog 但这会停止执行,这不是我想要的。
一些值得一提的事情: -frmProgress 将 ControlBox 属性设置为 false。-frmProgress 的 FormBorderStyle 设置为 FixedDialog
另外:当我使用 Show() 方法时,当我将鼠标悬停在显示的表单上时,会出现 Windows“忙圈”光标。ShowDialog() 没有这种行为......好像表单正在等待什么......希望这能澄清我的问题。
vb.net - 当预期为 true 时,InvokeRequired 不断返回 false
我有以下测试代码。它没有任何用处,但我可以理解 VB:
表格由 aButton
和 a组成Label
。
仅出于学习目的,我已将更改标签中文本的方法放在另一个线程中。然而,InvokeRequired
价值不断返回False
。这怎么可能?它Label1
是在主线程中创建的,并且正在 runThread 中进行调整,因此InvokeRequired
应该给出 True。
在这里,我读到当尚未创建表单句柄时会发生这种情况,因此我更改了Run
方法:
这并不能解决问题。
c# - 更正以下委托和调用控件的方法
我需要在 DoWork 事件处理程序中访问列表视图的项目。为此,我编写的委托和调用列表视图的方法是:
这是我第一次使用调用控件。所以请让我知道我错在哪里。我得到的一个错误是gsm_modem.Form1.getItems(System.Windows.Forms.ListView): not all code paths return a value
. 我什至猜想我写的可能是错的。请指正。。
multithreading - 线程的奇怪行为
我正在编写一个使用 MODBUS 协议与某些硬件通信的应用程序。
我正在使用代码项目中的这个示例。
在尝试优化代码(主要是PollFunction
函数)时,我遇到了一个非常奇怪的线程锁。
我没有将每一行字符串发送到DoGUIUpdate
delagate,而是构建一个字符串数组并将其作为一个整体发送。
这样做会导致应用程序因System.Reflection.targetParametercountException: Parameter count mismatch
错误而崩溃。
原代码:
我的代码:
欢迎任何建议。