问题标签 [begininvoke]
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# - 在 C# 中调用 BeginInvoke/Invoke 时如何获取返回值
我有这个应该是线程安全的小方法。一切正常,直到我希望它具有返回值而不是 void。调用 BeginInvoke 时如何获取返回值?
编辑:我想在这种情况下不需要 BeginInvoke,因为在线程可以继续之前我需要来自 GUI 的值。所以使用 Invoke 也很好。只是不知道如何在以下示例中使用它来返回值。
但也不确定如何使用该代码获得价值;)
vb.net - 委托,开始调用。EndInvoke - 如何清理对同一委托的多个异步威胁调用?
我创建了一个我打算调用 Async 的委托。
模块级别
我在方法中使用的以下代码
该方法运行并执行所需的操作
Asyn 回调在我执行 EndInvoke 的完成后触发
只要在委托上启动 BeginInvoke 的方法仅在没有 BeginInvoke/Thread 操作正在运行时运行,它就可以工作。问题是可以调用一个新线程,而委托上的另一个线程仍在运行并且还没有被 EndInvoke'd。
如有必要,程序需要能够让委托一次在多个实例中运行,并且它们都需要完成并调用 EndInvoke。一旦我开始另一个 BeginInvoke,我就会失去对第一个 BeginInvoke 的引用,因此我无法使用 EndInvoke 清理新线程。
克服此问题的干净解决方案和最佳实践是什么?
c# - 为什么在这里使用 BeginInvoke?
我正在研究其他人的代码,并且对与多线程有关的任何事情都没有太多经验。我遇到了这行代码:
BeginInvoke((MethodInvoker)delegate() { btnCalibrate.PerformClick(); });
我想知道为什么这样做会起作用:btnCalibrate.PerformClick();
感谢您的回答。
c# - 为什么这个后台工作人员代码会导致此错误:参数计数不匹配
下面这段代码有什么问题?conn_PageDeleted 来自后台线程,每次收到回电时我都会尝试更新标签。我收到一条错误消息
参数计数不匹配。
这是代码:
.net - 为什么你可以在同一个委托实例上多次调用 BeginInvoke?
我认为BeginInvoke
在同一个委托实例上多次调用会导致问题,但我尝试了它并且它有效。这是为什么?
返回的IAsyncResult
对象是否与每个BeginInvoke
调用的唯一而不是委托的每个实例一起返回?
换句话说,我是否只需要一个委托实例来产生对其函数的多次调用?
c# - BeginInvoke 的性能影响
我继承了从主线程(不是后台线程,通常是模式)调用 BeginInvoke 的代码。我试图了解它在这种情况下的实际作用。
BeginInvoke 中调用的方法是否与到达窗口的消息一致?文档说asynchronously
,这是我的假设。
框架如何确定何时启动 BeginInvoke 调用的方法的优先级?
编辑:代码如下所示:
这发生在 Form_Load 事件中。
c# - Silverlight 4 访问 WCF 数据服务:BeginInvoke 受挫
我正在尝试遵循使用 Silverlight 4 beta 执行 WCF 数据服务查询的模式。以下是我的代码:
这是从我遇到的使用 silverlight 的 WCF 数据服务的一些示例中得出的。不幸的是,无论我如何尝试实现代码,我都会在“Dispatcher.BeginInvoke”上遇到以下错误:
'非静态字段、方法或属性需要对象引用 (System.Windows.Threading.Dispatcher.BeginInvoke(System.Action)'
gridview - Why doesnt the AsyncCallback update my gridview?
I started working with delegates last week and i am trying to update my gridview async on the background. All goes well, no errors or such but i dont get a result after my EndInvoke. does anyone know what i am doing wrong?
Here is a code snippet:
.net - 在.net中实现多线程的不同方法是什么
几天来我一直在与多线程作斗争。
我不明白有什么不同的方式multithreading
。我已经阅读了一些backgroundWorker
关于创建线程对象的内容。昨天我在示例中看到delegate
通过调用BeginInvoke
.
我不明白这些不同的方式是multithreading
在同一个背景类上工作还是相同的工作。请帮我说清楚。
.net - 与从非 GUI 线程显示 MessageBox 相关的问题
我正在开发一个大量数据绑定的 Win.Forms 应用程序,在该应用程序中我发现了一些奇怪的行为。该应用程序具有单独的 I/O 线程,通过异步 Web 请求接收更新,然后将其发送到主/GUI 线程以处理和更新应用程序范围的数据存储(这反过来可能是数据绑定到各种 GUI 元素, ETC。)。Web 请求另一端的服务器需要定期请求或会话超时。
我已经尝试了几种处理线程问题等的解决方案,并且观察到以下行为:
如果我使用 Control.Invoke 将更新从 I/O 线程发送到主线程,并且此更新会导致显示 MessageBox,则主窗体的消息泵会停止,直到用户单击确定按钮。这也会阻止 I/O 线程继续运行,最终导致服务器超时。
如果我使用 Control.BeginInvoke 将更新从 I/O 线程发送到主线程,则主窗体的消息泵不会停止,但如果更新处理导致显示消息框,则处理其余部分该更新将暂停,直到用户单击“确定”。由于 I/O 线程一直在运行并且消息泵一直在处理消息,因此可能会在消息框完成之前调用多个 BeginInvoke 进行更新。这会导致不可接受的无序更新。
I/O 线程将更新添加到阻塞队列(非常类似于在 .NET 中创建阻塞队列<T>?)。GUI 线程使用 Forms.Timer 定期应用阻塞队列中的所有更新。这个解决方案解决了阻塞 I/O 线程和更新顺序的问题,即下一次更新在前一次完成之前永远不会开始。但是,性能成本很小,并且在显示更新时引入了延迟,从长远来看是不可接受的。我希望主线程中的更新处理是事件驱动的,而不是轮询。
所以我的问题。我应该如何做到这一点:
- 避免阻塞 I/O 线程
- 保证更新按顺序完成
- 保持主消息泵运行,同时显示一个消息框作为更新的结果。
更新:请参阅下面的解决方案