最佳答案
这个问题我以前先想了很久,有三种实现方法。
①把这个系统对话框,放在另一个线程里,那么你的主线程不会停住
②异步调用对话框vi
③你说的这个调用方法
那么最后我是用1来做的,因为其他两个蛋疼一点,你自己做的对话框vi,难看到爆炸。而且如何文本框居中,如何自动调节对话框宽度、高度,都很难做。看起来简单的系统对话框,背后的东西复杂得很,很难实现。
但是这个也有解决办法,系统vi里有一个“3按钮对话框”,这个是开源的,你可以把这个另存一下,然后在这个基础上改成你想要的vi。(这里我当时一直想找到这个“单对话框vi”的开源内容,找不到,不知道有没有大神知道)
回归主线,对话框是否覆盖,是否需要卡住线程,深入之后确实有很多讲究。有些对话框比较重要,一定要覆盖其他的对话框。有的虽然是“单按钮对话框”(单按钮与双按钮的区别,一个只是提示,一个需要卡住等待回复),也最好要让用户钮看清楚看明白了之后,才能继续后续操作。这些情况都会有的,对话框的合理运用,其实很难。
我自己也没有十分完美的解决方案,想给对话框一个分级思路(低级不能覆盖高级),但是很折腾就放弃了。后来觉得有些地方卡在那也没关系,因为对话框显示的时候,本来就无法进行其他鼠标操作,发生冲突的概率并不高,但是在main线程里,这种冲突还是经常有的,可以复现的,我想提问题的兄弟也是遇到了这种问题。因此,我有一个自己的约定,主要vi的main线程里,不放置“单按钮对话框”,除非是上文讲的,需要用户看清楚了再操作的情况,如果需要展示对话框,就用另一个线程展示出来,这个线程里的对话框,无法自我覆盖(消息队列框架,如果我的框架你完全不清楚,那我说的就当废话了)。那么这样可以解决大部分问题了,另外有个技巧,在其他线程里,如果有的提示十分重要,那么就是用系统对话框,保证可以覆盖当前对话框。
大概就是这么多,写得很杂乱,也是我自己边写边思考,欢迎讨论
这个问题我以前先想了很久,有三种实现方法。
①把这个系统对话框,放在另一个线程里,那么你的主线程不会停住
②异步调用对话框vi
③你说的这个调用方法
那么最后我是用1来做的,因为其他两个蛋疼一点,你自己做的对话框vi,难看到爆炸。而且如何文本框居中,如何自动调节对话框宽度、高度,都很难做。看起来简单的系统对话框,背后的东西复杂得很,很难实现。
但是这个也有解决办法,系统vi里有一个“3按钮对话框”,这个是开源的,你可以把这个另存一下,然后在这个基础上改成你想要的vi。(这里我当时一直想找到这个“单对话框vi”的开源内容,找不到,不知道有没有大神知道)
回归主线,对话框是否覆盖,是否需要卡住线程,深入之后确实有很多讲究。有些对话框比较重要,一定要覆盖其他的对话框。有的虽然是“单按钮对话框”(单按钮与双按钮的区别,一个只是提示,一个需要卡住等待回复),也最好要让用户钮看清楚看明白了之后,才能继续后续操作。这些情况都会有的,对话框的合理运用,其实很难。
我自己也没有十分完美的解决方案,想给对话框一个分级思路(低级不能覆盖高级),但是很折腾就放弃了。后来觉得有些地方卡在那也没关系,因为对话框显示的时候,本来就无法进行其他鼠标操作,发生冲突的概率并不高,但是在main线程里,这种冲突还是经常有的,可以复现的,我想提问题的兄弟也是遇到了这种问题。因此,我有一个自己的约定,主要vi的main线程里,不放置“单按钮对话框”,除非是上文讲的,需要用户看清楚了再操作的情况,如果需要展示对话框,就用另一个线程展示出来,这个线程里的对话框,无法自我覆盖(消息队列框架,如果我的框架你完全不清楚,那我说的就当废话了)。那么这样可以解决大部分问题了,另外有个技巧,在其他线程里,如果有的提示十分重要,那么就是用系统对话框,保证可以覆盖当前对话框。
大概就是这么多,写得很杂乱,也是我自己边写边思考,欢迎讨论
4
举报
-
惜宇:
方法1我也试过,比较麻烦。因为很多情况是在主线程产生的提示。例如在通讯的主线程里面产生报错,然后再另外一个线程里面来弹框报错这个也比较恶心。我也不能再主线程里面弹框,万一当时无人的话就卡在这儿了。要在其他线程去报错就感觉比较麻烦。如果用文本框显示的话也没有提示框明显。
现在就是想执行以下有没有想VB一样的msgbox一样的东西,不会中断我的进程
-
xxx
回复
惜宇:
满足要求的系统对话框目前没找不到,坐等锐哥大神回复,可能其他的包里会有这个系统函数。
我这个不麻烦啊兄弟,,就是单独有一个消息队列循环,专门用来弹出对话框,你要弹什么内容,发到这个循环,让它弹出就好了。调用循环不会卡住。
-
xxx
回复
惜宇:
最后一句话没说清楚,额外说一遍。“调用方线程(循环)不会卡住。”
-
惜宇
回复
xxx:
明白了,多谢大兄弟。虽然线会拉的老长老长的但终归是比较好的解决方案。