C# 线程中的线程:如何获取 SynchronizationContext.Current?

发布于 2024-08-06 16:28:12 字数 337 浏览 3 评论 0原文

我有一个 WindowsForms 应用程序,其中 SynchronizationContext.Current 不为 null
但是从那个 WindowsForms 应用程序中,我创建了一个名为 thread1 的新线程
从 thread1 我创建了另一个名为 thread2 的线程
当我尝试使用 SynchronizationContext.Current 从 thread1 中的 thread2 发布方法时,将失败,因为 SynchronizationContext.Current 为 null

请给我一个从线程 2 到线程 1 的 POST 方法的解决方案,但异步

I have a WindowsForms application wich has SynchronizationContext.Current not null
But from that WindowsForms app I create a new Thread called thread1
From thread1 I create another Thread called thread2
When I try to POST methods from thread2 in thread1 using SynchronizationContext.Current, will fail because SynchronizationContext.Current is null

Please give me a solution to POST a method from thread2 to thread1, but asynchronously

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

没企图 2024-08-13 16:28:12

由于 thread1 位于将处理发布消息的同步上下文中,因此您需要使用 thread1 的同步上下文进行发布。 (将同步上下文视为消息接收者。)因此,您需要以某种方式将 thread1 的同步上下文传递给 thread2。一种方法是使用 ParameterizedThreadStart 委托将其作为参数传递给 thread2:

private void Thread2Func(object obj)
{
  SynchronizationContext parentThread = (SynchronizationContext)obj;
  // ...
  parentThread.Post(someCallback, someState);
}

并在 thread1 中:

thread2 = new Thread(Thread2Func);
thread2.Start(SynchronizationContext.Current);

Because thread1 is in the synchronisation context that will handle the posted message, you need to post using thread1's synchronization context. (Think of the synchronization context as the message receiver.) So you need to pass thread1's synchronization context to thread2 somehow. One way is to pass it as a parameter to thread2 using a ParameterisedThreadStart delegate:

private void Thread2Func(object obj)
{
  SynchronizationContext parentThread = (SynchronizationContext)obj;
  // ...
  parentThread.Post(someCallback, someState);
}

and in thread1:

thread2 = new Thread(Thread2Func);
thread2.Start(SynchronizationContext.Current);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文