程序中的线程加互操作

Posted

技术标签:

【中文标题】程序中的线程加互操作【英文标题】:Threading plus interop in program 【发布时间】:2012-02-24 11:44:08 【问题描述】:

我有一个 WPF C# 应用程序,其中某个函数需要很长时间才能执行其操作。

int result = MyFavFunctions.mainfunction(searchquery);

我想在单独的线程上执行此函数的计算,而不是阻塞 UI 线程。另外,在我得到这个操作的结果之前,我不想在函数中继续进行,因为int result是我在进一步使用的。

这可以通过线程来完成吗?

此外,我也不确定,因为这个 mainfunction 中的函数实际上是从 C++ dll 导出的函数。那么,在这个 main 函数之后,如果我在 dll 中使用其他导出的函数(它们只是用来取值),它们会不会有合适的结果?

【问题讨论】:

事情是,当您等待 int 结果时,UI 不会被阻塞,但如果该结果对用户有用,那么就没有真正的收获。在回调中,您需要查看这些导出的函数是否可用。就像骰子说的那样——测试起来很容易。 【参考方案1】:

是的,线程是如何实现的 - 请查看 http://msdn.microsoft.com/en-us/magazine/cc163328.aspx 以获取一些有用的信息,特别是您想要的是 BackgroundWorker (http://msdn.microsoft.com/en-us/magazine/cc163328.aspx#S4)。

至于 fetch 函数的结果 - 这在很大程度上取决于 dll 的实现方式 - 如果它打算以这种方式使用,那么它们应该可以正常工作 - 将一个临时测试应用程序放在一起是微不足道的验证这一点。

【讨论】:

以上是关于程序中的线程加互操作的主要内容,如果未能解决你的问题,请参考以下文章

Vista 中的 VB6 .NET 互操作问题

DotNet2.0不允许线程互操作各控件的解决方法。

Office 互操作程序集 Windows 10

PL/I 程序中的 z/OS MVS 和 z/OS UNIX 互操作?

COM 互操作 (CCW) 中的重载 - IDispatch 名称包括后缀(_2、_3 等)

创建了对嵌入的互操作程序集间接引用,无法嵌入互操作类型