我正在放置一個Silverlight 5應用程序,該應用程序將在瀏覽器外運行,並且在啓動時有一些所有內容。具體來說,以下是我需要遵循的步驟:爲SL5 OOB應用程序實現啓動任務
- 檢查應用程序是否用完瀏覽器(如果沒有,則顯示指示用戶在本地安裝它的屏幕)。
- 顯示一個「啓動畫面」(如果在剩下的步驟執行時播放動畫會很好)。
- 配置MEF
- 預加載上下文信息和來自服務器的「靜態」數據(例如設置)。這些數據在任何應用程序邏輯運行之前都是必需的。
- 動態加載其他XAP文件,包括外部主題庫。
- 將「splash screen」替換爲包含導航框架的外殼。
- 導航到應用程序的開始頁面。
我還需要支持應用程序擴展服務(IApplicationService,IApplicationLifetimeAware),所以我實現的任何進程都必須遵守這些服務。這些服務中的大多數都需要配置MEF,所以它們不應在MEF配置和導入滿意之前執行。
另一個考慮因素是,只有在動態XAP文件被引入並且MEF重組後,才能滿足一些導入。
我遇到的一個障礙是事實,我不能做第5步,直到前面的步驟完成。加載XAP文件或異步調用服務器數據允許繼續執行代碼。我需要一種方法來「停止」用戶界面,直到所有構圖完成並且所有需要的上下文數據都已加載完畢。
因此,我正在尋找能夠滿足所有這些要求的推薦方法,並且很樂意提供更多詳細信息,以幫助您獲得可行的解決方案。
UPDATE
我可以給我的困難,最好的解釋是,我必須「釋放」 UI線程來顯示「啓動畫面」,但也暫停,而每一步的應用程序的正常生命週期執行。我不能(也不想)在Application.Start事件處理程序中做所有事情,因爲應用程序服務已經啓動。
另外,釋放UI線程意味着我在後臺工作並讓原始方法(例如Application.Start)返回,運行時將在啓動過程中向前移動。例如,在應用程序服務的啓動方法中啓動後臺進程,然後返回允許運行時在應用程序對象上引發啓動事件。但是如果我需要完成後臺進程才能完成下一步操作,則必須暫停阻止UI的當前線程。
所以我不確定如何劃分工作或放在哪裏(應用程序,應用程序服務,引導程序,工作流程等)。
就這樣嗎?你有什麼嘗試? –
我已經單獨完成了大部分步驟,但沒有完成。我故意沒有涉及到各種實現,因爲我正在尋找其他人已經或將要做的事情,而不是專注於我已經或未完成的事情(特別是因爲我沒有成功地將它們放在一起)。 – SonOfPirate