问题标签 [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 - 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)在 HorizonRealTime.UI.frmInfo R:\csavb2010dlls\Test\TestSoloutions\StoreAutoStuff\HorizonRealTimeVB10\CommanderRealTime.UI\frmInfo.vb 中的 .UpdateGUI(cHorizonColoredString strdata):R:\csavb2010dlls\Test\TestSoloutions\ 中 HorizonRealTime.UI.frmInfo.DoWork() 的第 93 行StoreAutoStuff\HorizonRealTimeVB10\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 以避免发生此错误的任何帮助,我们将不胜感激。
c# - 从后台工作人员调用控件停止且没有错误
我正在运行一个BackgroundWorker
应该更新我的UserControl
. InvokeRequired
我在检查属性后尝试调用:
我也尝试直接调用RichTextBox
我的内部UserControl
:
但是当我调试代码时,它只是停止运行其余代码而没有错误。
两者_ucResultRich.InvokeRequired
并_ucResultRich.rchResult.InvokeRequired
返回true
。
我在这里做错了吗?
更新
我把Invoke
零件放进去try catch
,现在我可以从异常消息中得到以下错误:
是因为它无法确定控制吗?因为它显示它像Control ''
。
c# - 如何调用 Delegate.Target 的 .Invoke 方法?
给定以下方法:
我注意到e
有一个属性 Target。
当我进一步研究它时,我发现我可以检查 ife.Target is System.Windows.Controls.Control
或e.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 控件:
该项目引用了几个库:
vb.net - 如何通过不同的线程访问richtextbox
嘿伙计们,我的问题是如何在线程中访问(更新/读取)richtextbox。我刚刚创建了一个非常简单的代码,让您了解我在做什么。我在网上搜索了一些关于invoke、delegate或backgroundworker的文章,希望有人能告诉我哪些以及如何使用。真的感谢。
结束类
c# - 调用self绕过不同的线程?C#
我已经环顾了大约 3 个小时,但无法让这个调用工作。我需要调用,因为调用它的是在不同的线程中并且说它不稳定。
这就是我所说的(我这样称呼它textBox1_TextChanged(null, null);
):
c# - 我应该在控件内部调用吗?
我正在编写一个 Winforms 控件,它包装了一个 JS 库并扩展了一个 Web 浏览器控件。
我这样调用 JavaScript 函数:
这个方法用来调用我所有公开的方法,根据name
参数调用JS函数。
我应该这样做,还是应该期望我的方法的用户在适当的线程上进行调用?
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.
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,但一旦执行连接,应用程序就会卡住,后台线程无法退出主循环(似乎应用程序是忙或冻结)。
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:
c# - Control.InvokeRequired 在整个方法中发生变化
看看这些截图。首先在我的代码中显示一个断点并显示 InvokeRequired 的当前值。
秒屏幕截图显示在调试器中按 F10(跳过)一次后 InvokeRequired 的值(不输入 IF 语句内容,ELSE 是)。
接下来发生的是 rtbOutput 上的 InvalidOperationException,因为我尝试在 ReportProgress 中更改其字段。这是我如何调用 OnProgressReported:
这怎么可能?是否有其他更好的方法来检测是否应该调用 Invoke?
更新:
我已将方法代码更改为以下内容:
唯一的输出是
线程上不需要调用:#15 名为 ''
并且该方法在rtbOutput.Text = "abc";行上引发异常
然而!当行rtbOutput.Text = "xxx"; 被注释掉,一切正常,即使rtbOutput.Text = "abc"; 仍然存在!
更新 #2 - 解决方案:
问题是尚未创建的窗口句柄(我在创建窗口后立即订阅了一个事件)我必须等待使用创建句柄