0

我这里有一个很奇怪的问题。我有一个多线程程序,一个线程用于用户界面,一个线程为程序的其余部分初始化所有组件。当我启动初始化线程时,用户界面线程会显示一个带有进度条的表单(在主表单上方),以向用户显示正在发生的事情(这就是为什么初始化线程是一个单独的线程,如果它是在主线程,这个表单永远不会更新,看起来程序崩溃了)。在初始化线程的某些点,程序可能需要请求用户输入;通常这是通过显示一个消息框来完成的。还需要注意的是,目标 PC 没有键盘或鼠标,只有一个触摸屏界面。现在问题来了:如果我从初始化线程内部放置一个消息框,主窗体不是父窗体。这意味着如果用户在消息框之外单击,则消息框位于主窗体的后面,程序将暂停,直到用户连接键盘,然后重新聚焦消息框以选择答案。我已经尝试了各种方法来解决这个问题。我尝试将主窗体设为父窗体,但出现跨线程错误。我尝试让初始化线程调用主线程,但随后初始化继续,我无法反馈用户输入的结果。我制作了一个始终位于顶部的特殊消息框,但这可以防止显示错误(如果在第三个线程上发生错误)。我的最终想法可能会奏效,但它很麻烦而且可能不是正确的解决方案。这将要求我为所有初始化步骤制作进度点,随着每一步完成,我会将其标记为已完成。然后,如果初始化线程遇到一个问题,它就结束了,主线程会问这个问题,然后重新启动初始化线程,跳过所有已经初始化的东西,并提供 . 我没主意了。当我的主线程显示消息框并提供此反馈时,如何让我的初始化线程暂停并等待反馈?提前致谢!当我的主线程显示消息框并提供此反馈时,如何让我的初始化线程暂停并等待反馈?提前致谢!当我的主线程显示消息框并提供此反馈时,如何让我的初始化线程暂停并等待反馈?提前致谢!

4

1 回答 1

0

感谢您的建议,调用控件最终成为解决方案,但它比这稍微复杂一些。由于不能在显示之外使用消息框对象,因此我无法创建要传递给委托的消息框。解决方案是创建一个 messageboxproperties 类,该类包含显示消息框所需的所有信息(父、文本、标题、图标、按钮)。然后我将此类的一个实例传递给委托,并让委托创建/显示消息框。这让我可以传递任何消息框信息并将其显示在任何形式的正确线程上。如果有办法传递消息框仍然会很好,但现在可行。感谢所有的投入!

于 2013-11-06T13:55:52.350 回答