我正在编写一个WPF应用程序,它具有对API的可选依赖项,并且该API有一个简单的要求; 必须在没有STA线程属性的线程上进行初始化/使用。 当然,WPF需要STA,因此这一切都很容易。
在这种情况下,无论如何都需要WPF。 只有当用户选择在应用程序中启用此功能时才需要第三方API。 这意味着WPF应用程序已经在调用其他API时运行。
如果您没有使用[STAThread]装饰您的主方法,则它自动成为MTA线程吗? 在这种情况下,这是否意味着我可以创建一个新的MTA线程并在其上使用其他API?
如果这样可以,那么我想这个API的任何事件都可以使用Dispatcher与WPF应用程序通信(用于引发需要在UI中显示的事件等)。 但是,我的WPF应用程序是否有一种简单的方法来“调用”MTA线程上的功能以进行API调用?
在MTA中,我想每个线程都应该能够处理状态,但我想我的STA线程(WPF应用程序)不能只是“插手”MTA线程并执行API调用?
这里存在很多混淆的可能性,我希望能获得一些关于如何设计这样的东西的建议!
谢谢!
[编辑7月8日]
好了,我在上面混淆了一些概念。线程模型当然是为一个进程设置的,而不是为每个线程设置的,并且这个第三方API不能与STA进程一起使用。
目前,我唯一看到的解决方法是编写一个与该API通信的服务,然后使用命名管道与该服务通信。这一点都不简单,是一种丑陋的解决方法,但是第三方API不在我的控制之下。这就是人生。 :|
在这种情况下,无论如何都需要WPF。 只有当用户选择在应用程序中启用此功能时才需要第三方API。 这意味着WPF应用程序已经在调用其他API时运行。
如果您没有使用[STAThread]装饰您的主方法,则它自动成为MTA线程吗? 在这种情况下,这是否意味着我可以创建一个新的MTA线程并在其上使用其他API?
如果这样可以,那么我想这个API的任何事件都可以使用Dispatcher与WPF应用程序通信(用于引发需要在UI中显示的事件等)。 但是,我的WPF应用程序是否有一种简单的方法来“调用”MTA线程上的功能以进行API调用?
在MTA中,我想每个线程都应该能够处理状态,但我想我的STA线程(WPF应用程序)不能只是“插手”MTA线程并执行API调用?
这里存在很多混淆的可能性,我希望能获得一些关于如何设计这样的东西的建议!
谢谢!
[编辑7月8日]
好了,我在上面混淆了一些概念。线程模型当然是为一个进程设置的,而不是为每个线程设置的,并且这个第三方API不能与STA进程一起使用。
目前,我唯一看到的解决方法是编写一个与该API通信的服务,然后使用命名管道与该服务通信。这一点都不简单,是一种丑陋的解决方法,但是第三方API不在我的控制之下。这就是人生。 :|