问题标签 [cross-thread]
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# - 富文本框选择操作上的跨线程操作
我在 .Net winform 应用程序中创建了一个自定义富文本框,但遇到了一个奇怪的问题。目标是将文本附加到具有特定格式的富文本框中,所有这些都在另一个线程中。为此,我创建了委托回调。一旦我开始使用富文本框中的任何“选择”属性,我就会得到一个 cross_thread 异常,但在 Controls.add(control) 函数中......
这是不同的代码:
主表格
用户控制
自定义富文本框
如果我删除了中的选择操作,AppendText
并且只让该行Text += text
一切正常。我真的不明白为什么在添加控件时会引发错误,我需要了解有关选择操作的任何特定知识吗?
c# - 跨线程的 Windows MessageBox 显示问题
我正在尝试使用MessageBox.Show()方法显示错误消息通知。但是我遇到了跨线程操作问题。我使用了下面的代码。如何解决跨线程问题?我尝试使用MethodInvoker,但它没有解决我的问题。请向我建议解决此问题的指南。
问题 :
跨线程操作无效:控件“MainPage”从创建它的线程以外的线程访问。
c# - 在其他线程中触发事件后在事件处理程序中更新 UI 的最佳方法
我的项目需要按事件更新一些 UI 元素,并且一些事件在异步或后台线程中触发。所以我需要在事件处理程序中添加一些线程安全的代码。
但我发现项目中有很多相同的情况。这些零散的线程安全代码让整个项目代码相当难看,希望有办法改进。
这是其他线程中火灾事件的示例代码:
这里有两种 updateText 代码:
当然,第二个代码肯定更好,但是如果将它添加到所有可能被异步调用的事件处理程序中,代码会变得让人不愉快。
有更清洁的解决方案吗?
c# - 为什么我的winform可以跨线程访问无错误无异常
最近尝试在winform中使用多线程,在网上复制了一段代码。没想到这段代码在我的电脑上运行正常,并没有出现跨线程访问异常。我想弄清楚为什么。我使用.net4.0 csc编译器构建程序,win7 Ultimate sp1。我的粒子代码如下
vb.net - 如何使用定时器和不同的线程让代码流畅运行
我试图防止 GUI冻结Timer.Tick
,因为计时器间隔低并且在事件处理程序中处理太多。
我已经用谷歌搜索了一段时间,我了解到我无法从 UI 线程以外的任何其他线程更新 UI。
那么,如果您在 下使用大量控件Timer1.Tick
呢?
如何在使用带有计时器的 WebClient 下载数据时更新标签,您不想过多地降低间隔并同时保持 UI 响应?
当我访问 UI 元素、ListBox1 和 RichTextBox 时,我收到了跨线程违规异常。
在不导致交叉威胁异常的情况下,使用计时器和/或线程更新 UI 的正确方法是什么?
c# - CommonOpenFileDialog - 从 UI 线程调用后跨线程操作无效
所以我正在使用 windowsAPICodepack 中的 CommonOpenFileDialog。在我正在编写的应用程序的早期版本中,CommonOpenFileDialog 没有任何问题。在针对更高版本的 .Net Framework 的当前版本中,即使通过主窗体中的工具条菜单项单击事件从主 UI 线程调用对话框,我也会得到跨线程操作无效异常。之前它曾经以类似的方式从主窗体的按钮单击处理程序中调用。
显式调用在同一表单上显示 CommonOpenFileDialog 的相同代码可以解决此问题,但通常的对话框行为会以这种方式丢失。
这有效,但没有 this.Invoke 则无效。
此外,虽然 while(wait) 存在,但 UI 仍然是响应式的,而当按下按钮进行阻塞调用时,通常情况并非如此。不知道这里发生了什么......
编辑:底部更广泛的堆栈跟踪。
编辑 - 这是 ShowfolderChooser 所做的(正常时返回 true,取消时返回 false):
完全例外:
可是等等...!还有更多...
所以我尝试将该代码放在一个单独的应用程序中,并且它可以完美地工作。所以我想这与我的应用程序有关。我看到的一个很大不同是我的堆栈框架上loadWorkspaceToolStripMenuItem_Click
有一个堆栈条目user32.dll![Frames...
知道那个来自哪里吗?估计跟那个有关系...
EDIT2更广泛的堆栈跟踪:
从这个堆栈跟踪中,我可以确认调用是在 UI 的主线程上完成的,因为它应该是由 MessageLoop 调用的。似乎 getHandle 有问题在某处出错。但这是在 API 包中它应该可以工作......
c# - 使用任务设置 DataGridView
我正在使用 Task() 在我的应用程序启动期间卸载工作。它工作正常。然后它不是......如果我做对了,我正在制作“SomeStatusradGridView”的副本。这意味着我应该没问题,除了我收到以下错误:
此异常最初是在此调用堆栈中引发的:HumanResources.cs 中的 [外部代码] MOSES.Logic.HumanResources.HumanResources.SomeStatusradGridView(Telerik.WinControls.UI.RadGridView) MOSES.Presentation.Main.Main_Load.AnonymousMethod__15_0() 中的 Main。 cs [外部代码]
这是我遇到问题的代码:
现在,如果我进行以下更改:
我没有收到错误消息,但这似乎表明没有制作副本。任何见解都会很棒。
谢谢!
c# - 为什么创建一个新表单并在另一个线程中显示它不会在 Visual Studio 中引发跨线程异常?
假设我有一个 Windows 窗体,然后单击一个按钮来启动一个新线程。如果在那个新线程中我更改了当前表单的某些内容,例如它的背景颜色,Visual Studio 将引发一个无效操作异常,因为我已经跨线程执行 UI 工作。
但是,如果在另一个线程中我创建一个新表单并显示它,我不会得到这样的例外。
这是为什么?
multithreading - 两个类之间的非法跨线程操作。无法区分线程以解决问题
我有一个我编写的小程序,它允许两个用户输入(开始和停止)、一个开始按钮和一个进度条。这是实际程序的精简修改版本,其内容足以显示错误。我想将所有用户输入保留在表单中,并且所有代码都在它自己的类中进行实际工作。尝试更新进度条时返回错误。我认为问题可能源于我的 bgw 实际上是从工作类调用一个方法而不是包含代码本身。下面我展示了表单代码,然后是 clsTask 代码。我很难理解它的多线程方面。有没有办法从表单中更新进度条,还是我需要完全重组?
分频器
结束类
c# - WinForms选项卡控件导致跨线程操作
这是我收到的错误。我在 winforms 控件上有一个按钮(如下图所示)。我有一个附加到 click 事件处理程序的 async void 方法(如下所示)
我遇到的问题是,当我第一次以这种形式加载时,这段代码运行得非常好,我可以点击按钮 1000 多次,并且没有发生跨线程错误。
我收到此错误的唯一时间是当我执行以下操作时
- 隐藏表单
form.Hide()
(保留对表单的引用) - 再次显示表格
form.ShowDialog()
- 点击刷新按钮
当从异步方法调用调用 UI 控件时,表单上的所有按钮似乎都会出现某种跨线程问题。就好像隐藏然后重新显示对话框会在新线程上创建新控件但它永远不会再次调用 Initialize 方法。
有谁知道我为什么会遇到问题?
编辑 这也是一个 VSTO excel 插件项目。表单是通过单击功能区按钮创建的,我在功能区类中保留表单的引用以重新显示它