Silverlight WCF数据服务按顺序保存
我正在尝试创建一种方法,允许我以顺序流保存,即示例代码:Silverlight WCF数据服务按顺序保存,silverlight,wcf,odata,wcf-data-services,Silverlight,Wcf,Odata,Wcf Data Services,我正在尝试创建一种方法,允许我以顺序流保存,即示例代码: 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 目前,我一直在胡闹手动重置事件和自动重置事件,但还没有得到它去,所以我想我会问。下
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
目前,我一直在胡闹手动重置事件和自动重置事件,但还没有得到它去,所以我想我会问。下面是我对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线程,否则应用程序将无法处理任何用户输入、网络和其他事情。它还将冻结浏览器窗口。总而言之,这是一个非常糟糕的用户体验 建议的编程方法是使用回调,这意味着您的代码将被分成几个部分(几个方法或委托) 看看VisualStudio的异步CTP(http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=9983)这使得其中一些更容易。它允许您几乎像以前一样编写代码,并且编译器会为您将所有代码拆分为回调
如果您确实需要阻塞,那么您可以在SL中启动一个后台线程并在那里执行,但是您必须记住,来自异步API(如BeginSaveChanges)的回调将在不同的线程上执行(取决于API,有时是UI线程,有时是另一个后台线程).不要试图强制它变为同步,而是使用回调功能 例如:可以将原始调用拆分为两个方法调用,并将第二部分设置为save的回调。当然,您需要更新保存方式,但这应该不会太难
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