gpt4 book ai didi

c# - 有没有办法在指定线程上执行回调?

转载 作者:行者123 更新时间:2023-11-30 22:35:06 41 4
gpt4 key购买 nike

我正在编写一个库,希望能够在指定线程上触发回调,这样最终用户就不必担心线程安全问题。

我尝试使用 ExecutionContext,但效果不是很好,它会在指定的上下文(一个新线程)中触发,但不会在最初调用该函数的线程上触发。

代码应该像这样工作:

void Connect() {
// This should be in the same thread ..
SocketAsyncEventArgs.Completed += eventHandler;
Socket.ConnectAsync(SocketAsyncEventArgs)
}

void eventHandler() {
// .. as this
}

最佳答案

您不能只在某个现有线程上运行您的代码。该线程已经在执行其他代码。但是,它可以为您提供一些在其上运行代码的方法。 WPF 应用程序中的主线程使用 Dispatcher.Invoke() 执行此操作。 WinForms 应用程序的主线程使用 Control.Invoke()

有一种更通用的方法:使用 Synchronization.Context.Current .这适用于 WPF 或 WinForms 应用程序的主线程,但否则将在线程池线程上执行回调。 (除非有某种自定义同步上下文,我认为这种情况很少见。)

但这是你能做的最好的了。就像我说的,你不能在你想要的时候在其他线程上运行你的代码。其他线程中的代码必须允许您这样做。

关于c# - 有没有办法在指定线程上执行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536462/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com