2011-07-12 43 views
1

Eclipse RCP的:如何阻止用户界面背景

运行的工作,而我在对话框有一个测试按钮,当用户点击该按钮,我的应用程序将尝试通过JDBC连接到数据库。

对于某些测试用例,此作业将需要很长时间才能响应用户,例如网络连接超时。我通过将侦听器附加到该按钮并连接到该侦听器中的数据库来完成此操作。连接时,直到连接作业完成后,用户界面才会响应。连接完成后,任何连接的用户动作都会生效。

例如:在该对话框中有另一个“取消”按钮,单击此按钮将关闭对话框。如果在连接作业正在运行时单击“取消”按钮,则在连接作业完成之前,对话框将不会关闭!

我希望用户操作在我的连接作业运行时发生,将被丢弃,不存储并稍后生效。

我使用的Windows 7


日食靛蓝我的问题应该是这样的:
如何忽略运行在后台工作,而任何用户的行为发生。

+1

能否请你解释一下,为什么Display.execSync()或BusyIndi​​cator.show(显示器,可运行),对您的问题没有有效的解决方案? –

+0

@Seveny.execSync()正在运行时,如果用户单击“关闭应用程序”按钮,应用程序将在Displayy.execSync()完成时退出。但是我希望“关闭应用程序”操作将被忽略。 – CaiNiaoCoder

回答

0

swt中只有一个UI线程(也是大多数其他的),您的编程方式会阻止UI。

对于你的工作,你需要创建一个新的线程来做到这一点,在UI线程没有那么这种长期的作业,请执行1.5中引入。

最好的方法是使用eclipse的Job机制。你可以开始借鉴:http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html

2

两种方式,我发现当作业在后台运行,到目前为止,忽略任何用户操作:

第一个是叫shell.setEnabled(false)操作开始之前和​​后操作完成。 (可选)与BusyIndicator结合为用户提供一些反馈。

第二个是使用没有按钮模态对话框,这样用户不能将其关闭(样式e.g SWT.APPLICATION_MODAL | SWT.SHEET | SWT.NO_TRIM)。该对话框包含一个标签,例如“Loading ...”或ProgressBar。当使用RCP时,ProgressMonitorDialog是一个选项。

在我来说,我不想因为我不知道后台作业运行多长时间,使用第二个解决方案。如果工作很短,当ProgressMonitorDialog快速连续打开和关闭时,我想避免一些闪烁。

@ screentiger.com我没有你分享的文章看你怎么忽略任何用户操作而工作在后台运行。 我会很感激,如果你可以更具体,也许给一个代码示例。

相关问题