问题标签 [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.

0 投票
3 回答
1524 浏览

delegates - 通过委托执行可重写方法时,Invoke() 和 BeginInvoke() 的行为不同

谁能告诉我为什么这段代码的行为方式如此?查看代码中嵌入的注释...

我在这里错过了一些非常明显的东西吗?

0 投票
6 回答
204385 浏览

c# - Invoke() 和 BeginInvoke() 有什么区别

BeginInvoke()只是想知道和之间有什么区别Invoke()

主要是每个人的用途。

BeginInvoke()编辑:创建线程对象和调用调用和调用委托之间有什么区别?还是它们是同一回事?

0 投票
7 回答
70743 浏览

winforms - System.Windows.Threading.Dispatcher 和 WinForms?

是否在应用程序System.Windows.Threading.Dispatcher的 UI 线程上工作WinForms

如果是,为什么?它来自似乎是一个WPF组件的 WindowsBase.dll。

如果没有,我如何将工作单元调用回 UI 线程?我找到了Control.BeginInvoke(),但是创建一个控件来引用原始线程似乎很笨拙。

0 投票
4 回答
5143 浏览

timeout - 超时后是否需要调用 EndInvoke?

在网页上,我打电话给不允许我以编程方式设置超时的第三方。我调用 BeginInvoke 并使用 AsyncWaitHandle.WaitOne 等待指定的时间量。

如果调用超时,我会继续并忘记我开始的线程调用。我的问题是,在超时情况下我还需要以某种方式调用 EndInvoke 吗?这个 MSDN 页面上的“CAUTION”评论让我想知道我是否应该:http: //msdn.microsoft.com/en-us/library/2e08f6yc (VS.71).aspx

如果您认为我应该这样做,那么下一个问题是如果我的网页在第三方返回之前完成处理并返回到客户端,回调方法是否会在那里监听运行代码?一旦我的请求/响应完成,服务器是否不会停止寻找活动?

这是我正在使用的代码:

0 投票
1 回答
1273 浏览

c# - CastException 试图调用 Action> 异步委托

我似乎无法弄清楚为什么我会收到运行以下代码的 InvalidCastException:

异常信息:

任何帮助将不胜感激 =) 这段代码似乎适用于我扔给它的任何东西,除了 KeyValuePair<>。

更新:似乎任何结构都存在这种情况。我没有注意到 KeyValuePair<> 是一个结构,因此仅使用类进行测试。我仍然不明白为什么会这样。

更新 2:西蒙的回答帮助确认了这种行为是意外的,但是实现自定义类型不适用于我想要做的事情。我正在尝试在 IEnumerable<> 上实现一个扩展方法,以便为每个项目异步执行委托。我注意到针对通用 Dictionary 对象运行测试时出错。

我宁愿不使用对 T 的约束来限制该方法以确保仅使用类,因此我已按如下方式重构该方法以解决 BeginInvoke 的问题,但我之前没有直接使用 TreadPool 并希望确保我我没有错过任何重要的东西。

0 投票
2 回答
15286 浏览

wpf - Winforms 到 WPF 的转换:BeginInvoke 到什么?

这是我来自 WinForms 的旧代码:

有没有一种简单的方法可以将其转换为对 WPF 友好?到目前为止,我有:

但是第二个“代表”电话失败了。我怎样才能调用这个委托?我想我可以完成整个制作委托方法,制作委托方法的实例,调用该特定实例等,但我认为这些匿名委托的全部意义在于避免这种麻烦。另外,我的旧 winforms 代码到处都有第一个实现,所以我真的很想避免必须对我的所有代表进行去匿名化。

编辑:我可以尝试像以前一样使用 MethodInvoker,但是编译器会感到困惑。MethodInvoker 是 System.Windows.Forms 的一部分,因此使用该方法不起作用。如:

MethodInvoker 的使用是不洁的。是否有单独的实现,或其他方式来使用相同的行为?

0 投票
3 回答
3648 浏览

c# - 使用 control.begininvoke 后 UI 仍然无响应

我制作了一个 C# winforms 应用程序。现在我有一个有很多按钮的表单,它们调用大量的数字处理函数,我在文本框中更新其输出。我调用 textbox.begininvoke() 方法,我将委托传递给更新文本框中文本的函数,但是当文本很大时,表单没有响应,因为我无法单击取消按钮。有没有办法让整个表单保持响应,并且更新也不断发生。我必须在数据即将到来时向用户显示数据,我无法缓冲整个数据并最终显示。我还尝试实现我自己的缓冲区并以特定间隔显示数据,这对于少量文本非常有用,但在大量文本中,UI 只是没有响应。有什么帮助吗?谢谢

在出现一些混乱时更新问题

  • 我已经在单独的线程上调用了数字运算功能。
  • 每当数据到达时,该数字运算函数调用 control.begininvoke 函数以更新文本框
  • 我的 UI 将被显示,我看到了输出,但是当数据很大时,我不能做任何其他活动,尽管我仍然可以看到 UI
0 投票
6 回答
33397 浏览

c# - 匿名方法作为 BeginInvoke 的参数?

为什么不能将匿名方法作为参数传递给BeginInvoke方法?我有以下代码:

我试图避免声明代表。为什么我不能写类似下面的东西呢?或者我可以,我只是想不出正确的语法?以下当前生成:

参数类型“匿名方法”不可分配给参数类型“System.Delegate”

好的,这当然是对的,但是我可以使用其他一些语法来执行此操作(避免必须声明单独的委托才能使用BeginInvoke()?

(能够做到这一点将完全符合使用匿名方法/lamdas 代替显式委托的概念,这在其他任何地方都非常干净。)

0 投票
1 回答
162 浏览

c# - 在异步编程模型中使用什么是好的命名指南?

我正在对一段代码进行一些重构,以将所有阻塞操作转换为异步操作。我的代码在 C# 中,并且正在执行 UPnP 查询,然后是 HTTP 查询。为此,我使用了 UdpClient 和 WebClient 的 APM 方法(BeginReceive 等)。

我的单一方法现在是一系列 Call_1 -> Callback_1 -> Call_2 -> Callback_2 等等。

有人可以指出一些关于在这种情况下应该给方法命名的指导方针,知道除了 Call_1 之外的所有东西都不是我的类接口的一部分。Callback_1、Call_2 等方法实际上只是取消同步工作流的副作用。你会使用什么命名法?

使用 CCR,一切都将保留在一个使用 yield 关键字的漂亮方法中,但不幸的是,我现在不会使用 CCR。

0 投票
2 回答
2969 浏览

.net - 超时调用

我们有一些代码在后台线程中运行,需要弹出对话框或其他一些用户交互,所以我们Invoke对 UI 线程进行通常的调用:

但是,我们遇到了一个错误,我们的 UI 线程有时没有立即响应Invoke调用 - 我们跟踪到 UI 线程当前正在执行尚未返回的跨进程 DCOM 调用这一事实。一旦 DCOM 调用返回,我们的函数就会被调用,但在那之前,Invoke调用似乎已经挂起。

我对此的解决方案是引入超时:

这在“我的机器意义上的作品”中有效,但它有许多缺陷。


(来源:codinghorror.com

  • 首先,即使发生超时,该函数仍然会被调用——如果 DCOM 调用实际上没有完全挂起,它最终会运行
  • 其次,有明显可怕的比赛条件
  • 最后,整个事情的整体“Arrgh”-ness

即使前两件事可以解决,我们仍然有普遍的恶心。有没有更好的方法来解决这个问题?