我有一个fortran(非托管代码)dll作为计算引擎,还有一个C#表单作为GUI。
现在,fortran中的计算很长,所以为了不让用户厌烦,我决定使用Asynch命令来创建进度条。随着计算的进行,fortran dll将负责将消息放入进度条。
知道如何做到这一点?
答案 0 :(得分:1)
您必须在Fortran dll中实现报告数字进度的anoter函数。例如:“GetCalculationProgress”返回两个整数(当前迭代和迭代总数)。您可以在C#应用程序的另一个线程中定期调用该函数并读取这些值。在Fortran中,您可能必须使用全局变量来跟踪这些变量。
此外,这是一个解释回调方法的链接:
http://xtechnotes.blogspot.com/2008/07/callback-to-c-from-unmanaged-fortran.html
答案 1 :(得分:0)
单一责任:UI负责显示进度信息,无论是进度条还是其他视觉效果。 Fortran不应该知道信息是如何显示的,而是只发出“事件”,说“刚刚开始”,“55%”,“差不多完成”和“哎呀不起作用。”
事件如何通过?您可能需要某种“缓冲”技术,可能使用(命名)管道或消息队列技术。 Fortran可以使用C库,所以我想如果你选择一种通信技术,如果Fortran不直接支持你,你可以先写一点C然后从Fortran获得它。