C# 上的 Qt 事件回调

问题描述 投票:0回答:1

我遇到一个问题,不允许我从带有 Qt 的 dll 获取事件到 C# 上的程序。 事件来了,但我需要强制窗口的事件队列使用 Application.doEvents()

对于回调,我使用一个指针,将数据发送到通过以下方法捕获的 C# 程序

public byte OnKpeDllEvent(int category, IntPtr pInfo)
    {
        KPE_EVENT_INFO Info = new KPE_EVENT_INFO();
        if (pInfo != IntPtr.Zero)
        {
            m_hInstance = pInfo;
            object struttura = Marshal.PtrToStructure(pInfo, typeof(KPE_EVENT_INFO));
            if (struttura != null)
                Info = (KPE_EVENT_INFO)struttura;
        } 
}

这另一种方法是我从我保证有效的另一种方法发送事件的地方

void KpeQTLibrary::onConnected() {
KPE_EVENT_INFO einfo{};

einfo.nLine = -1;
einfo.nSize = sizeof(KPE_EVENT_INFO);

if (m_pCallbackProc != NULL)
    m_pCallbackProc(KPE_EVENT::CONNECTED, &einfo);

qDebug() << KPE_EVENT::CONNECTED;
}

我希望我说得足够清楚

c# c++ qt pointers
1个回答
0
投票

好的,我已经解决了我的问题,因为一些 QT 方法需要从主线程调用。

this.Invoke(new Action(() => Initialize()));

Initialize() 是我启动所有功能的主要方法。

© www.soinside.com 2019 - 2024. All rights reserved.