【发布时间】:2009-07-08 15:07:32
【问题描述】:
我正在编写一个 WPF 应用程序,该应用程序对具有简单要求的 API 具有可选依赖项;它必须在没有 STAThread 属性的线程上初始化/使用。当然,WPF 需要 STA,所以一切都很简单。
在这种情况下,无论如何都需要 WPF。仅当用户选择在应用程序中启用此功能时,才需要此第三方 API。这意味着一旦需要调用其他 API,WPF 应用程序就已经在运行。
如果你不使用 [STAThread] 装饰你的 main 方法,它会自动成为 MTA 线程吗?在这种情况下,这是否意味着我可以创建一个新的 MTA 线程并在其上使用其他 API?
如果这可行,那么我猜来自这个 API 的任何事件都可以使用 Dispatcher 与 WPF 应用程序通信(用于引发需要在 UI 中显示的事件等)。但是,是否有一种简单的方法可以让我的 WPF 应用程序“调用”MTA 线程上的功能来进行 API 调用?
在 MTA 中,我猜每个线程都应该能够处理状态,但我猜我的 STA 线程(WPF 应用程序)不能只是“进入”MTA 线程并执行 API 调用?
这里有很大的混淆可能性,我希望能就如何设计这样的东西提供一些意见!
谢谢!
[编辑 7 月 8 日]
好吧,我在上面混淆了一些概念。线程模型当然是为一个 PROCESS 设置的,而不是为每个线程设置的,而且这个第三方 API 不能与 STA 进程一起使用。
目前,我从这个混乱中看到的唯一方法是编写一个与这个 API 通信的服务,然后使用命名管道与这个服务通信。这一点都不是微不足道的,一个丑陋的解决方法,但第三方 API 不在我的控制之下。这就是生活。 :|
【问题讨论】:
标签: .net wpf multithreading