2011-07-12 85 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我沒有你分享的文章看你怎麼忽略任何用戶操作而工作在後臺運行。 我會很感激,如果你可以更具體,也許給一個代碼示例。

相關問題