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

vb.net - form.Invoke(delegate) 无法访问已处置的对象。。网

环境:vb.net visual studio 10 - win forms

错误:

{“无法访问已释放的对象。对象名称:'frmInfo'。”}

堆栈跟踪:

在 System.Windows.Forms.Control.MarshaledInvoke(控制调用者,Delegate 方法,Object[] args,布尔同步)在 System.Windows.Forms.Control.Invoke(Delegate 方法,Object[] args)在 Horizo​​nRealTime.UI.frmInfo R:\csavb2010dlls\Test\TestSoloutions\StoreAutoStuff\Horizo​​nRealTimeVB10\CommanderRealTime.UI\frmInfo.vb 中的 .UpdateGUI(cHorizo​​nColoredString strdata):R:\csavb2010dlls\Test\TestSoloutions\ 中 Horizo​​nRealTime.UI.frmInfo.DoWork() 的第 93 行StoreAutoStuff\Horizo​​nRealTimeVB10\CommanderRealTime.UI\frmInfo.vb:第 75 行在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.runTryCode(Object userData) 在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode代码,CleanupCode backoutCode,对象 userData)在 System.Threading.ExecutionContext。RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)在 System.Threading.ThreadHelper.ThreadStart()

简单说明:

我有 1 个带有许多子 mdi 表单的主表单。

一种形式(frminfo)管理服务器进程生成的所有状态/错误消息。

这些消息被放置在

当它进入 if me.invokerequired { me.Invoke(delegate)} 时,问题很少发生(通常只是在应用程序启动时),当它尝试调用自身时,我得到一个对象已处置错误。

即使在调试中,该对象在错误发生后也不会被标记为已处置。

如果我将 me.invoke 包装在 try/catch 中......它会很好地处理以下消息。

文本框中的输出最终看起来像这样:

有趣的是,这个文本框在我复制文本的 frminfo 上。

更奇怪的是。它实际上是在收到此错误之前处理消息。因此,已处置的错误异常似乎是错误的读数,实际上正在发生其他事情。

在 frminfo 上是一个低优先级的线程,基本上像这样无限循环


在主 UI 线程上,我确实创建了对此 mdi 子表单的附加引用。

第一个是我添加每个 mdi 子表单的集合。除了添加之外,我让 GC 完全处理这个问题。(我这样做是为了确保我的表单不会被处理掉)

还有一组表格用于对 mdi 子项进行排序。这

在某些情况下,我确实喜欢

我遍历集合,最后我放回参考

我认为这种排序不会影响调用 me.invoke 来更新本地控件的线程。因为我只是对参考文献进行排序?

对于更好地使用 me.invoke 以避免发生此错误的任何帮助,我们将不胜感激。

0 投票
1 回答
457 浏览

c# - 从后台工作人员调用控件停止且没有错误

我正在运行一个BackgroundWorker应该更新我的UserControl. InvokeRequired我在检查属性后尝试调用:

我也尝试直接调用RichTextBox我的内部UserControl

但是当我调试代码时,它只是停止运行其余代码而没有错误。

两者_ucResultRich.InvokeRequired_ucResultRich.rchResult.InvokeRequired返回true

我在这里做错了吗?

更新

我把Invoke零件放进去try catch,现在我可以从异常消息中得到以下错误:

是因为它无法确定控制吗?因为它显示它像Control ''

0 投票
1 回答
536 浏览

c# - 如何调用 Delegate.Target 的 .Invoke 方法?

给定以下方法:

我注意到e有一个属性 Target。

当我进一步研究它时,我发现我可以检查 ife.Target is System.Windows.Controls.Controle.Target is System.Windows.Forms.Control.

这太棒了,因为在使用这个扩展的情况下,为了方便(而且我很懒),我希望能够判断委托目标是否需要调用委托(在 WinForms 的情况下:Control.Invoke( foo );在 WPF 的情况下:) Control.Dispatcher.Invoke( foo )

我不需要知道如何将对象转换为它的实际类型(我可以没有它):我只需要知道我是否可以转换对象以便我可以访问InvokeRequired属性和Invoke方法(在WinForms 控件的情况)或Dispatcher属性(用于访问Dispatcher.CheckAccess( )函数和Dispatcher.Invoke( )方法)。

这可能吗?我该怎么做呢?(我尝试将 e.Target 转换为System.Windows.Control.Control但结果没有Dispatcher属性)。

编辑

根据对铸造代码(和进口/参考)的要求:

要确定它是否是 WPF 控件:

要确定它是否是 WinForms 控件:

该项目引用了几个库:

0 投票
1 回答
361 浏览

vb.net - 如何通过不同的线程访问richtextbox

嘿伙计们,我的问题是如何在线程中访问(更新/读取)richtextbox。我刚刚创建了一个非常简单的代码,让您了解我在做什么。我在网上搜索了一些关于invoke、delegate或backgroundworker的文章,希望有人能告诉我哪些以及如何使用。真的感谢。

结束类

0 投票
1 回答
487 浏览

c# - 调用self绕过不同的线程?C#

我已经环顾了大约 3 个小时,但无法让这个调用工作。我需要调用,因为调用它的是在不同的线程中并且说它不稳定。

这就是我所说的(我这样称呼它textBox1_TextChanged(null, null);):

0 投票
1 回答
53 浏览

c# - 我应该在控件内部调用吗?

我正在编写一个 Winforms 控件,它包装了一个 JS 库并扩展了一个 Web 浏览器控件。

我这样调用 JavaScript 函数:

这个方法用来调用我所有公开的方法,根据name参数调用JS函数。

我应该这样做,还是应该期望我的方法的用户在适当的线程上进行调用?

0 投票
1 回答
681 浏览

unit-testing - Wanted but not invoke: Mockito test

I have a problem. I don't understand why mockito go in exception. RecordWriter write a Record into the file. I want verify if it write or not. I implemented another function and i tried to mock(OutputStream.class), but the result is the same. My current test is:

The exception is:

Thanks to all.

0 投票
0 回答
297 浏览

vb.net - 线程:调用卡住.NET

我有一个系统托盘应用程序。托盘应用程序有一个图标和一个带有一些选项的上下文菜单。有一个名为 status 的菜单,其中包含以下工具条菜单项:

  • 开始
  • 重新开始
  • 停止

它们根据某些条件启用/禁用。

我的系统托盘应用程序有一个后台线程,它会不断检查一些条件并做一些工作。它的主循环如下:

gAppExit 是一个全局变量,指示用户是否已通过“退出”工具条菜单项退出应用程序。

thdExit 表示线程是否应该退出循环(我稍后解释)。

当用户想要重新启动后台线程时,他单击重新启动工具条菜单并完成以下顺序(重新启动->暂停->等待完成):

请注意,在 Halt 函数上,它通过在函数 WaitFinish 上调用 Me.ThreadBgWorker.Join() 来等待线程完成。在调用 WaitFinish 函数之前,将 thdExit 设置为 true,以便后台线程可以退出主循环:

在退出循环时,调用 ChangeStatusToStopped(),如下所示:

它的作用是在 UI 中启用启动工具条菜单项并禁用重新启动和停止工具条菜单项。

问题是:

在 ChangeStatusToStopped 方法中,当 MainMenu.InvokeRequired 为 true 时,它​​调用:

然后它就卡在那里了,也就是说,else body:

永远不会被执行。似乎主线程很忙或消息泵中的其他问题....有什么想法吗?

我看到了那条线:

Me.ThreadBgWorker.Join()

在后台线程退出主循环之前到达 WaitFinish() 函数,尽管在执行 Me.ThreadBgWorker.Join() 之前已将 thdExit 设置为 true,但一旦执行连接,应用程序就会卡住,后台线程无法退出主循环(似乎应用程序是忙或冻结)。

0 投票
2 回答
526 浏览

c# - C# Questions regarding Invoke, Invokerequired & Multithreading

I have 2 forms running on different threads. Form2 will generate a string, send it back to form1 and update the richtextbox in form1. I got the code from my friend but I don't understand a part of it.

Could you please explain to me why do we need the condition:

And what do 2 lines below do?


Full Code Form1:

0 投票
0 回答
365 浏览

c# - Control.InvokeRequired 在整个方法中发生变化

看看这些截图。首先在我的代码中显示一个断点并显示 InvokeRequired 的当前值。

步骤1

秒屏幕截图显示在调试器中按 F10(跳过)一次后 InvokeRequired 的值(不输入 IF 语句内容,ELSE 是)。

第2步

接下来发生的是 rtbOutput 上的 InvalidOperationException,因为我尝试在 ReportProgress 中更改其字段。这是我如何调用 OnProgressReported:

这怎么可能?是否有其他更好的方法来检测是否应该调用 Invoke?

更新:

我已将方法代码更改为以下内容:

唯一的输出是

线程上不需要调用:#15 名为 ''

并且该方法在rtbOutput.Text = "abc";行上引发异常

然而!当行rtbOutput.Text = "xxx"; 被注释掉,一切正常,即使rtbOutput.Text = "abc"; 仍然存在!

更新 #2 - 解决方案:

问题是尚未创建的窗口句柄(我在创建窗口后立即订阅了一个事件)我必须等待使用创建句柄