问题标签 [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 投票
2 回答
1777 浏览

c# - 多线程,访问UI控件

我有一个简单的应用程序,带有通常的 UI 线程和后台工作人员,在后台工作人员中我需要动态创建 LinkLabels 并将它们放置在 FlowLayoutPanel 中。为此,我需要将 LinkLabel 的父级设置为 FlowLayoutPanel。

这是我目前拥有的一段代码,但是,我在“l.Parent = panel;”行上得到了臭名昭著的“跨线程操作无效”

我对多线程操作相当陌生,但我认为我正确地调用了,但显然不是。有什么建议么?

0 投票
2 回答
150 浏览

c# - 我的 InvokedRequired 会发生什么?

我的代码有什么问题??

为什么它不去真实的陈述?

在此处输入图像描述

0 投票
1 回答
1165 浏览

c# - 我的 InvokeRequied #2 有什么问题?

第一个主题是我的 InvokeRequied 出了什么问题

我按照他向我推荐的答案进行操作,但我发现了一个新问题。

下图的结果是跨线程异常。

我的代码有什么问题?

如何解决这个问题呢 ?

在此处输入图像描述

0 投票
2 回答
1072 浏览

c# - 在 .Net 2.0 的 Property 的 getter 中不使用 Func 调用

我想在getter中使用Invoke,使用.Net 2.0而不是4.0时怎么做?对于 .Net > 2.0,我们可以使用Func.Net 2.0 的替代品是什么?

这是 .Net 4.0 的示例(来自链接

0 投票
1 回答
693 浏览

c# - GetContentsRichTextBox() 返回类型错误

我正在尝试编写一种从另一个线程读取富文本框内容的方法。下面是我的代码:

但是我收到以下错误消息:

'string WindowsFormsApplication1.frmMain.ObtainContentsRichTextBox()' 的返回类型错误

我确定我做错了一些简单的事情,但我有点 C# 新手。谁能指出我做错了什么?

0 投票
1 回答
3813 浏览

c# - BeginInvoke 会阻塞 UI,而 Invoke 不会。!

我对跨线程访问遇到的场景感到困惑。这是我正在尝试做的事情:

主 UI 线程 - 菜单项单击我创建了一个后台工作程序并异步运行它

方法ExecuteTheActionSelected如下:

localBackgroundWorker_DoWork

Execute该类中的方法具有方法调用程序,该方法调用程序实际上调用 UI 线程中的事件处理程序:

UI 事件处理程序如下:

现在出现了跨线程问题

这里Invoke 不会阻塞 UI,因为 BeginInvoke 会阻塞。请帮助我理解这种情况,因为我很困惑。

0 投票
0 回答
1719 浏览

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() 没有这种行为......好像表单正在等待什么......希望这能澄清我的问题。

0 投票
1 回答
2932 浏览

vb.net - 当预期为 true 时,InvokeRequired 不断返回 false

我有以下测试代码。它没有任何用处,但我可以理解 VB:

表格由 aButton和 a组成Label

仅出于学习目的,我已将更改标签中文本的方法放在另一个线程中。然而,InvokeRequired价值不断返回False。这怎么可能?它Label1是在主线程中创建的,并且正在 runThread 中进行调整,因此InvokeRequired应该给出 True。

在这里,我读到当尚未创建表单句柄时会发生这种情况,因此我更改了Run方法:

这并不能解决问题。

0 投票
2 回答
149 浏览

c# - 更正以下委托和调用控件的方法

我需要在 DoWork 事件处理程序中访问列表视图的项目。为此,我编写的委托和调用列表视图的方法是:

这是我第一次使用调用控件。所以请让我知道我错在哪里。我得到的一个错误是gsm_modem.Form1.getItems(System.Windows.Forms.ListView): not all code paths return a value. 我什至猜想我写的可能是错的。请指正。。

0 投票
1 回答
99 浏览

multithreading - 线程的奇怪行为

我正在编写一个使用 MODBUS 协议与某些硬件通信的应用程序。
我正在使用代码项目中的这个示例。

在尝试优化代码(主要是PollFunction函数)时,我遇到了一个非常奇怪的线程锁。

我没有将每一行字符串发送到DoGUIUpdatedelagate,而是构建一个字符串数组并将其作为一个整体发送。

这样做会导致应用程序因System.Reflection.targetParametercountException: Parameter count mismatch错误而崩溃。

原代码:

我的代码:

欢迎任何建议。