问题标签 [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 回答
3585 浏览

c# - 当我没有可用的控件时如何调用()

我正在编写一个连接处理程序(一个请求用户名和密码的对话框)。该代码是一个显示对话框的处理程序。可以从线程调用此代码,因此我需要Invoke()if InvokeRequired

Control在理想情况下,我可以使用to do初始化 then 处理程序InvokeRequired,但有时 Control 可能为空。是否可以?我该如何实现代码?以下是正确的吗?

}

我的问题是:

  1. 如果我将空控件传递给InitializeMethod()
  2. 如果在UIThread中执行了Initialize()方法,后面的代码会起作用吗?
  3. 如果您没有任何控制来测试,推荐的模式是什么InvokeRequired

提前致谢


编辑:做一些测试,我意识到如果我将 null 传递给Initialize(),则控件不会在 UI 线程中运行,因此 InvokeRequired 似乎返回 false。总是。所以我的问题是,当我无法控制时,如何执行真正的(可变的)调用?


EDIT2mInvokeControl.CreateControl()解决问题。

0 投票
3 回答
3404 浏览

c# - 带有属性获取器的 C# InvokeRequired

我想让我的 getter 线程安全。当我这样做时,我得到一个错误:

我有错误:

0 投票
1 回答
651 浏览

winforms - 在 backgroundworker 线程中正确访问 Windows 窗体

我有一个 winforms 应用程序,我需要在 Backgroundworker 线程内访问主窗体的 Handle 属性。

我创建了一个线程安全的方法,它使用 InvokeRequired 调用主窗体。我的问题是 - 为什么我仍然会收到“InvalidOperationException 跨线程操作无效”错误,即使像这样调用这个线程安全方法:

下面是线程安全方法的代码(我的主应用程序表单称为 Updater):

我做错了吗?先感谢您。

稍后编辑:我将首先发布我需要手柄的原因,也许还有另一种解决方案/方法。在我的 Backgroundworker 线程中,我需要循环安装多个程序,并为每个安装程序启动一个进程。但是,我需要要求提升,以便此操作也适用于标准用户,而不仅仅是管理员。简而言之,我正在尝试按照教程here

0 投票
2 回答
336 浏览

.net - 为什么要打扰 InvokeRequired

我了解需要使用 Invoke/BeginInvoke 从工作线程调用函数或过程,这些函数或过程会更改属于 UI 线程的组件...

我的问题是 - 是否有充分的理由去检查 InvokeRequired?假设在不同情况下可以从工作线程或 UI 线程调用事件处理程序。让 UI 线程调用它自己最终会执行的方法上的 Invoke 是否有任何后果?

说...

现在,假设 event1 从 UI 线程触发,但事件 2 和/或 3 从其他线程触发......无论如何, event1 调用调用是否有任何危险,即使它不必这样做?是不是效率有点低?

0 投票
3 回答
101 浏览

c# - 使用调用删除文本?

所以,到目前为止,我在网上找到的关于 Invoke 属性的文档似乎并不是特别好,这实际上有点烦人,信不信由你。我了解 Invoke 的作用 - 您无法安全地直接访问 GUI,因此调用以安全的方式进行。没关系,但我不明白该方法中的变量。例如,如果我想从列表框中删除文本,我该怎么做?在我有点迷失之前,我已经走了这么远。

0 投票
1 回答
1563 浏览

c# - 为什么 StatusBar.Invoke 方法不适用于 ToolStripProgressBar?

我最近一直在开发一个应用程序,我想通过ToolStripProgressBar控件中包含的StatusBar控件在状态栏中显示另一个线程的进度。在我尝试添加此代码之前,我最初拥有更改ToolStripStatusLabel控件文本的代码,为此我使用了带有委托的 Invoke 方法,一切正常。但是,我发现当我尝试使用ToolStripProgressBar对状态栏的Invoke方法的调用失败时没有通知(没有错误,没有异常,什么都没有)。从那以后我学到的是,要以这种方式使用进度条,我必须使用BackgroundWorker控件。所以我的代码有效,但我不明白为什么我不能使用Invoke似乎已经有效的方法。

一些有效和无效的示例:

这有效

这没有用

在不起作用的示例中,该InvokeRequired属性为 true,因此Invoke调用了该方法,然后什么也没有发生。正如我所期望的那样,incrementProgressBarMethod这次它会再次调用 whereInvokeRequired是错误的,从而允许Increment触发该方法。

我真的很想知道为什么这不起作用。正如我所说,我已经重新调整以使用 a BackgroundWorker,我只是想要一个解释。

0 投票
1 回答
57 浏览

winforms - 如果我需要传入引用类型和值类型的混合,我该如何使用 Control.Invoke?

如何执行以下操作?

每次我这样做时,我都会得到“System.Int32 []”类型的对象无法转换为“System.Int32”类型,我根本不知道如何解决我的问题。我可能会对此进行非常不同的编码,但我对为什么不能这样做很感兴趣。

0 投票
2 回答
1669 浏览

c# - 检查 InvokeRequired 时出现 Stackoverflow 错误

执行 InvokeRequired 时出现 stackverflow 错误。

System.StackOverflowException 未处理

在此处输入图像描述

如何解决?没有信息我查看详细信息。

固定版本:

0 投票
4 回答
2641 浏览

c# - C# windows窗体自定义控件跨线程操作

我有一个主窗口窗体,在该窗体中,我有代表应用程序中不同屏幕的自定义控件。我想访问这个控件的子控件。有些东西我没有在这里......有时我会收到这个错误:

但有时一切正常。我不完全理解为什么会出现错误......可能是外部设备(MEI BillAcceptor)有一个事件(在Form1类内)对控件进行更改......所以让我写一个简单的代码......

当特定事件发生时,从 form1 调用方法 changeValue...

所以最烦人的事情是,有时一切都有效......所以我的问题是“我必须在这里使用 Invoke 吗?” 或者我如何通过对应用程序的较少更改来解决这个问题......

0 投票
5 回答
3255 浏览

c# - 如何在扩展/方法文件中使用调用方法?

好吧,我正在编写一个对字符串、标签、链接标签、类等有用的扩展/方法文件。

但是,我有一个问题。我有一种showMessage()更改标签文本的方法,效果很好。但我决定用线程执行来做这件事,然后我这样做:

对不起,这是一个错字。我在论坛上输入了这个代码。错误继续。

根据文档,要使用 Invoke 方法需要导入:

命名空间: System.Windows.Forms

程序集: System.Windows.Forms(在 System.Windows.Forms.dll 中)

然后我做了:

但这会返回相同的错误:

我该如何解决这个问题?

提前致谢。