2011-06-30 22 views
0

イムは、私はサンプルコード、つまり一連の流れに保存することができますメソッドを作成しようとしている:Silverlightの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 

現在、アイブ氏はManualResetEventとAutoResetEventと周りいじくるされたがhaventは、それはそうだろうました私は尋ねると思った。ここでステートセーブ方法の私の最後の反復がある:

#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コールバックに入ったということです。私はどこに間違っているかについての任意のアイデア?私がこれをどのように遂行できるかについての別の考え。あなたはUIスレッドをブロックしてはならないのSilverlightで

おかげ

答えて

0

は、それ以外のアプリケーションは、他のものの任意のユーザ入力、ネットワーキングおよび束を処理することができません。ブラウザウィンドウもフリーズします。すべてでは、本当に悪いユーザーエクスペリエンスです。

これをプログラムするには、コールバックを使用することをお勧めします。これは、コードが複数のメソッド(複数のメソッドまたはデリゲート)に分割されることを意味します。

Visual Studio用の非同期CTP(http://www.microsoft.com/download/en/details.aspx?displaylang=en & id = 9983)を参照してください。それはあなたがしたようにコードを書くことができ、コンパイラはあなたのためにすべてのコールバックに分割します。

ブロックする必要がある場合は、SLでバックグラウンドスレッドを開始してそこで実行することができますが、非同期API(BeginSaveChangesなど)からのコールバックは別のスレッドで実行されますAPI上ではUIスレッド、時には別のバックグラウンドスレッドと呼ばれることもあります)。

0

強制的に同期させるのではなく、コールバック機能を使用してください。

たとえば、元の呼び出しを2つのメソッド呼び出しに分割し、2番目の部分を保存のコールバックとして設定できます。コースの保存方法を更新する必要がありますが、あまり難しくありません。

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 
関連する問題