我遇到一个问题,不允许我从带有 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;
}
我希望我说得足够清楚
好的,我已经解决了我的问题,因为一些 QT 方法需要从主线程调用。
this.Invoke(new Action(() => Initialize()));
Initialize() 是我启动所有功能的主要方法。