C++ MFC&x2B+;在事件处理程序运行时防止UI锁定

C++ MFC&x2B+;在事件处理程序运行时防止UI锁定,c++,mfc,activex,C++,Mfc,Activex,我有物理背景,所以对MFC几乎没有经验。然而,我们使用的Thorlabs步进电机控制器通过ActiveX控件与PC对话 我写了一个小程序,可以移动一个电机,测量那个点的信号,然后在扫描2D区域的过程中继续。但是,在测量运行时,UI会锁定。有没有办法防止这种情况发生?这不会是一个问题,除了与各种设备的连接应该正确关闭这一事实,如果可以单击“正确退出”按钮,就可以完成 用户界面如下所示: UI在其自己的线程中执行,如果您执行(长时间运行)代码以响应UI事件(单击按钮?),您将锁定该线程。您需要创建另

我有物理背景,所以对MFC几乎没有经验。然而,我们使用的Thorlabs步进电机控制器通过ActiveX控件与PC对话

我写了一个小程序,可以移动一个电机,测量那个点的信号,然后在扫描2D区域的过程中继续。但是,在测量运行时,UI会锁定。有没有办法防止这种情况发生?这不会是一个问题,除了与各种设备的连接应该正确关闭这一事实,如果可以单击“正确退出”按钮,就可以完成

用户界面如下所示:

UI在其自己的线程中执行,如果您执行(长时间运行)代码以响应UI事件(单击按钮?),您将锁定该线程。您需要创建另一种所谓的方法,即分小步执行测量,并按照“谢谢”执行一步!我想我会从试着让onIdle工作开始。老实说,我很难理解worker/UI threads的各种教程。只有当您真的能够将测量分为非常小和快速的步骤时,onIdle才能很好地工作。一般来说,线程更好——这正是它们被发明的目的,但你需要通过一个不短且容易的学习曲线…@JānisŠmits:如果可能的话,我会远离
onIdle
。它在16位Windows上是非常必要的,这些年来一直被保留,主要是为了向后兼容。您的案例更适合使用背景线程。这些文档会让人感到困惑,因为它们涵盖了很多角落的情况,但将它们用于这样的情况确实非常简单。UI在其自己的线程中执行,如果您执行(长时间运行)代码以响应UI事件(单击按钮?),则会锁定该线程。您需要创建另一种所谓的方法,即分小步执行测量,并按照“谢谢”执行一步!我想我会从试着让onIdle工作开始。老实说,我很难理解worker/UI threads的各种教程。只有当您真的能够将测量分为非常小和快速的步骤时,onIdle才能很好地工作。一般来说,线程更好——这正是它们被发明的目的,但你需要通过一个不短且容易的学习曲线…@JānisŠmits:如果可能的话,我会远离
onIdle
。它在16位Windows上是非常必要的,这些年来一直被保留,主要是为了向后兼容。您的案例更适合使用背景线程。这些文档会让人感到困惑,因为它们涵盖了很多角落的案例,但是在这样的案例中使用它们真的很简单。