예제 #1
0
        public async void Start()
        {
            IsCollecting = true;
            CurrentId    = StartId;

            cancelSrc = new CancellationTokenSource();
            var progress = new Progress <RecipeRecord>((r) =>
            {
                // データが取得できなかった場合
                if (r.Id == 0)
                {
                    // 画面上のIDだけ更新する。
                    CurrentId++;
                    return;
                }

                // データは取得できたが読み込めない形式だった場合
                if (r.Id < 0)
                {
                    // データベースにエラー履歴を残す。
                    _db.AddErrorRecord(-r.Id);

                    // 画面上のIDだけ更新する。
                    CurrentId = -r.Id;
                    return;
                }

                // DataGridにレコードを追加する処理。
                ResultData += r.Id.ToString() + "\n";

                // DBにレコードを追加する処理。
                _db.AddRecord(r);

                CurrentId = r.Id;
            });

            try
            {
                await _collector.CollectRecordAsync(StartId, progress, cancelSrc.Token);
            }
            catch (OperationCanceledException)
            {
                IsCollecting = false;
                return;
            }

            IsCollecting = false;
        }