问题描述
1.前提条件:C++层每隔500ms通过回调函数传输到C#层的数据,同时我再回调函数体内调用invoke来刷新指定控件;2.此时我在c#中再另起一个线程,此线程的作用是打开一个模态窗体;3.把这个模态窗体打开之后,在c#层注册的回调函数就再也不会触发了,一直要等到我把模态窗体关闭之后才能重新触发。请教各位大神,这个到底是什么原因导致的?如果各位大神用过同花顺或者快期的话,就可以看到,不管在同花顺还是快期中,即使打开一个模态窗体,主窗体还是可以接受实时数据的,我现在想实现这个功能,但是就出现了上诉的原因?这个我截的并行堆栈的图:1.这个是没有开启模态窗体的图:我就纳闷了,为什么这个线程没有连接箭头线!!!!2.这个是开启之后的图
解决方案
解决方案二:
自己先顶一个
解决方案三:
你的第二个图已经告诉你了,你的代码都在“1线程”执行,根本不在子线程执行。你的if判断完全是多余的。不用c++,而用你的c#程序来写所有方法,你就知道怎么才能在子线程中回调了。
解决方案四:
引用2楼sp1234的回复:
你的第二个图已经告诉你了,你的代码都在“1线程”执行,根本不在子线程执行。你的if判断完全是多余的。不用c++,而用你的c#程序来写所有方法,你就知道怎么才能在子线程中回调了。
可是现在的话,所有数据都是从c++层传输过来的,有什么办法可以使获取数据另起线程吗?
解决方案五:
引用2楼sp1234的回复:
你的第二个图已经告诉你了,你的代码都在“1线程”执行,根本不在子线程执行。你的if判断完全是多余的。不用c++,而用你的c#程序来写所有方法,你就知道怎么才能在子线程中回调了。
还有就是我想知道为什么c++层的回调函数会和模态窗体由同一个线程运行呀?模态窗体我是重新开启了一个线程,回调函数的执行也是在主窗体中进行的,再怎么搞也不能和模态窗体处于同一个线程呀?
时间: 2024-11-02 22:11:33