簡體   English   中英

Silverlight WCF 數據服務按順序保存

[英]Silverlight WCF Data Services Save Sequentially

我試圖創建一個允許我保存在順序流中的方法,即示例代碼:

Private sub BlahWithSave()

'PERFOR ACTIONS
Blah()
Blah2()

'SAVE CHANGES TO DB
General.SaveState() 

'CARRY ON PERFORMING ACTIONS AFTER SAVE CARRIED OUT
Blah3()
Blah4()

End Sub

目前我一直在處理 ManualResetEvent 和 AutoResetEvent 但還沒有開始,所以我想我會問。 這是我對 SaveState 方法的最后一次迭代:

#Region " SAVE CHANGES "
    Private Shared ManualWaitEvent As System.Threading.ManualResetEvent
    Public Shared Sub SaveState()
        ManualWaitEvent = New System.Threading.ManualResetEvent(False)

        MyDataContext.BeginSaveChanges(Sub(result As IAsyncResult)
                                       ManualWaitEvent.Set()
                                       Deployment.Current.Dispatcher.BeginInvoke(Sub()
                                                                                     Dim     response As DataServiceResponse = MyDataContext.EndSaveChanges(result)
                                                                                 End Sub)
                                   End Sub, MyDataContext)
        ManualWaitEvent.WaitOne()
    End Sub
#End Region

問題是它只是停在 ManualWaitEvent.WaitOne 並且永遠不會進入 BeginSaveChanges 回調。 關於我哪里出錯的任何想法? 或者關於我如何實現這一點的另一個想法。

謝謝

在 Silverlight 中,您不能阻塞 UI 線程,否則應用程序將無法處理任何用戶輸入、網絡和其他一些事情。 它還將凍結瀏覽器 window。 總而言之,用戶體驗非常糟糕。

建議的編程方法是使用回調,這意味着您的代碼被分成幾個部分(幾個方法或委托)。

看看 Visual Studio 的異步 CTP (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=9983),它使其中一些變得更容易。 它允許您幾乎像以前一樣編寫代碼,並且編譯器會為您完成所有拆分為回調。

如果你真的需要阻塞,那么你可以在 SL 中啟動一個后台線程並在那里執行,但是你必須記住來自異步 API(如 BeginSaveChanges)的回調將在不同的線程上執行(取決於 API,有時是 UI 線程,有時是另一個后台線程)。

不要試圖強迫它變得同步,而是使用回調函數。

例如:您可以將原始調用拆分為兩個方法調用,並將第二部分設置為保存的回調。 當然,您需要更新保存方式,但這應該不會太難。

Private sub BlahWithSave()
    'PERFOR ACTIONS
    Blah()
    Blah2()

    'SAVE CHANGES TO DB
    General.SaveState(BlahWithSavePart2)
End Sub

Private sub BlahWithSavePart2()

    'CARRY ON PERFORMING ACTIONS AFTER SAVE CARRIED OUT
    Blah3()
    Blah4()

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM