【问题标题】:Handling COM Callbacks in C# Client在 C# 客户端中处理 COM 回调
【发布时间】:2012-04-17 16:48:04
【问题描述】:

这是应用程序的设计方式 - 我有一个 COM 服务器在某些条件下引发事件。 我有一个 C# 客户端 UI,它应该处理这个 COM 服务器引发的这些事件。

在我的 C# 客户端中有一个委托,我将它传递给 COM 服务器并回调一个事件。我有一个自定义包装器,它将委托编组为函数指针。就这样……

     Fxn1inCOMWrapper([In, MarshalAs(UnmanagedType.FunctionPtr)] Client.SetStatusDelegate StatusCallback);

回调机制有效。 这里的问题是,一旦我得到回调,我应该调用 COM 服务器中的另一个方法来调用进一步的处理。

我无法从 C# 回调方法对 COM 组件进行第二次函数调用,它破坏了 COM 中的堆栈并返回异常。 我猜是这种情况,因为回调与创建 COM 对象和进行第一次调用的线程不同。是否有可能解决这个问题?

一个选项是在 C# 客户端的事件回调中设置一个标志。在主线程的计时器上,检查标志,如果是,则进行第二次调用。但肯定必须有一种更优雅的方式来做到这一点......有人可以帮忙吗?

【问题讨论】:

  • 它与线程没有任何关系,该属性没有任何作用。您需要更好地诊断出问题所在。 COM 支持事件,您可能想使用它们。

标签: c# multithreading com callback interop


【解决方案1】:

尝试更改Main() 函数的线程属性。例如,如果您有:

[STAThread]
static void Main()

改成:

[MTAThread]
static void Main()

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2017-12-19
    • 2011-05-11
    • 2010-10-03
    • 2022-07-04
    • 1970-01-01
    相关资源
    最近更新 更多