2015-01-15 16 views
4

我已經實現了同步並且工作正常。由於同步時間很長,我想創建一個顯示同步進度的ProgressBar。我看過一些同步事件,如ApplyingChanges有關如何記錄同步過程的示例

然而,我沒有得到他們,因爲我期望,並且文檔也沒有給我太多的幫助。

有沒有人有鏈接到一些很好的例子如何同步記錄工程?我會非常感謝。

(我使用的是同步框架2.1)

例如,是不是還有ApplyingChangesChangesApplied事件之間的任何事件?

+1

哪個版本的Microsoft Sync Framework? – hwcverwe

回答

3

不幸的是我需要道歉,我無法顯示代碼,因爲我不再使用我們使用Microsoft Sync Framework 2.1的項目。希望這個解釋能讓你朝着正確的方向前進一步。

在Microsoft Sync Framework 2.1中,您可以訂閱會話進度事件:Microsoft.Synchronization.SyncOrchestrator.SessionProgress。老實說。我沒有得到一個可靠的進度欄使用這個事件。所以我從兩個同步提供商那裏收集了我自己的信息。

我只有DatabaseSyncProvider(它繼承RelationalSyncProvider)的經驗,但希望可以幫助你。
一個RelationalSyncProvider是提高一些事件,可以幫你收集信息: See RelationalSyncProvider

要知道,雙向同步意味着兩個同步會話。它建議計算每個會話的進度。因此,在雙向同步的情況下,一旦一個會話完成,您就達到50%。

對於更高級的進度條,您需要知道要同步的記錄數。結合從RelationalSyncProvider的事件收集的信息,您可以構建一個相當準確的進度條。爲此,您可以構建一種預覽,它將計算將在下一個會話期間同步的更改。
爲此,您可以使用目標端的SyncKnowledge和源端數據庫上的selectchanges查詢。 selectchanges查詢的where條款可用於您自己的countchanges存儲過程。由於您正在使用MS Sync Framework用於選擇更改的相同條款,因此您將檢索將爲該會話同步發送的記錄的確切數量。

我們正在使用這個'countchanges'不僅用於進度條,還用於統計和高級調度。如果你只是想要一個進度條,你需要在性能損失和用戶友好的進度條之間做出決定,或者有一個不太可靠的進度條。

+0

以前沒有聽說過'SessionProgress',試過了,在同步過程中發生了兩次。第一次以50/100和第二次100/100 ... 但是我確實知道提供者事件,但正如我在上次編輯中所說的,大部分同步時間都花在客戶端的ApplyingChanges和ChangesApplied之間,我似乎沒有得到其他事件... – Markus

+0

這是真的。 SessionProgress不準確。 SessionProgress取決於你有多少會話。 1會話:(單向同步)將爲0-100%。如果您正在同步雙向。50%意味着第一次會議結束,並從第二次會議開始。因此,根本不準確 – hwcverwe

+1

我無法回想應用更改和應用之間的內容。我在進度條中使用的大部分信息都來自同步提供程序的SyncProgress。我們還使用統計來預測同步過程兩個階段之間的持續時間。開始會話 - >確定更改 - >發送更改 - >應用更改 - >完成會話 – hwcverwe