2013-01-20 71 views
1
行動

想象我有一個使用的Loader包含在CM文檔執行協同程序,我用它來顯示我的網頁上忙指示符「最後」的協同程序

現在想象用戶嘗試添加對象已經存在數據存儲 - 當然在協程期間,'保存'操作將失敗,這意味着協程將取消執行

如果發生這種情況,枚舉數永遠達不到我的Loader.Hide()調用來隱藏忙指標 - m想知道是否已經有一種機制允許一些IResult實現執行,即使協程失敗了?

例子:

public IEnumerator<IResult> SaveData() 
    { 
     yield return Framework.Coroutines.Loader.Show("Saving Data"); 
     yield return new Framework.Coroutines.SaveOperation(SomeObject); 
     yield return Framework.Coroutines.Loader.Hide(); 
    } 

如果協同程序合法失敗的第二個步驟,忙碌指示器保持在屏幕上,使用戶沒有機會糾正自己的錯誤,並嘗試重新保存(並停止任何交互與底層的用戶界面!)

我只能擴展coroutine的實現,並有迭代器有一個標誌,說明是否允許他們執行時,有一個錯誤 - 只是想知道如果任何人已經做到這一點,或者如果它是我錯過了框架的一部分?

+0

基本上你需要實現你自己的自定義[SequentialResult](http://caliburnmicro.codeplex.com/SourceControl/changeset/view/a9efed22b615#src/Caliburn.Micro.Silverlight/SequentialResult.cs)。然後你可以使用'Coroutine.CreateParentEnumerator =(inner)=> new MySequentialResult(inner);' – nemesv

+0

來定製corutine創建。感謝你們,我重新實現了'SequentialResult'並創建了一個接口,它包含一個標誌'IResult'以確定例程是否允許在先前的故障之後運行。 'SequentialResult'仍然返回原始錯誤。運行良好 - 用我的幾個屏幕進行測試,以確保沒有問題 – Charleh

回答

1

您也可以使用Caliburn.Micro Action Filters。見SetBusyAttribute。 屬性的聲明式樣式是透明的,使代碼更容易管理。

+0

這很好,我喜歡加載器的實現,但這提供了一個不太乾擾的實現,儘管它確實意味着在視圖上綁定「IsBusy」我喜歡Loader(你不需要它,我很懶!:)) – Charleh