【问题标题】:Eclipse RCP: Display.getDefault().asyncExec still blocking my GUIEclipse RCP:Display.getDefault().asyncExec 仍然阻塞我的 GUI
【发布时间】:2011-12-12 10:58:40
【问题描述】:

我有一个简单的 viewPart 提供一些文本字段来输入硒测试的参数。填写完这些字段后,用户可以开始测试,大约需要 10 分钟。需要运行 30-45 分钟。我希望我的 GUI 在此测试期间保持活跃,让用户有机会做其他事情。我需要一个进度监视器。

我尝试将 selenium 测试放入包含 Display.getDefault().asyncExec 的作业中以运行它。但是我的 GUI 会在几秒钟后冻结,给出繁忙的指示符。 selenium 不更新任何其他视图,但进度监视器。

还有其他方法可以确保作业不会阻塞我的 GUI?

最好, 米尔科

【问题讨论】:

    标签: user-interface rcp


    【解决方案1】:

    (a)syncExec 中执行的所有操作都在使用显示线程,因此会阻塞您的 UI,直到它返回。我建议你使用Eclipse Jobs。这将使用工作台已经提供的开箱即用的进度指示器。

    【讨论】:

      【解决方案2】:

      我建议将您的代码拆分为更新 UI 的代码和执行其他业务的代码。在单独的线程中执行所有操作,当您需要检索或设置 UI 操作时,请使用“Display.getDefault().asyncExec”。

      Thread thread = new Thread("Testing") {
      
          // some shared members
      
          public void run() {
      
              someBusiness();
      
              // or use syncExec if you need your thread
              // to wait for the action to finish
              Display.getDefault().asyncExec(new Runnable() {
      
                  @Override
                  public void run() {
                      // UI stuff here
                      // data retrieval
                      // values setting
                      // actions trigging 
                      // but no business
                  }
      
              });
              someBusiness();
      
      };
      thread.start();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        相关资源
        最近更新 更多