- DevExpress奮闘記-108 (RealTimeSourceを試してみた, v12.xの新コンポーネント, データの変更を非同期でUI側に伝えるブリッジデータソース, asynchronous bridge source)
以前、RealTimeSourceについての記事をアップしましたが、ついでにもう一つ作成してみたのでメモメモ。
ついでに、C# 5.0のasyncとawaitも利用してみた。
読み取りに利用したデータは以下のものです。
- 郵便番号データダウンロード
上記のページにある全国版のKEN_ALL.csvを利用してます。
データ件数は、120000件超です。
以下、サンプルです。
サンプルでは、以下のようにしてFormとデータソースを構築しています。
Form (XtraForm) <=> RealTimeSource(rtsMain) <=> BindingSource (bdsMain) <=> データ (Data)
以下、サンプルです。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using DevExpress.Skins; using DevExpress.XtraEditors; namespace WindowsFormsApplication1 { public partial class Form1 : XtraForm { public Form1() { SkinManager.EnableFormSkins(); InitializeComponent(); InitializeControls(); } private void Form1_Load(object sender, EventArgs e) { SetDataAsync().GetAwaiter().OnCompleted(() => ssmMain.CloseWaitForm()); } private void Form1_Shown(object sender, EventArgs e) { ssmMain.ShowWaitForm(); } void InitializeControls() { bdsMain.DataSource = typeof(Data); rtsMain.DisplayableProperties = string.Join(";", typeof(Data).GetProperties().Select(x => x.Name).ToArray()); rtsMain.DataSource = bdsMain; grdMain.DataSource = rtsMain; grdMain.UseEmbeddedNavigator = true; grvMain.OptionsBehavior.Editable = false; } async Task SetDataAsync() { using (var reader = new StreamReader(@"KEN_ALL.csv", Encoding.GetEncoding("sjis"))) { for (var line = await reader.ReadLineAsync(); line != null; line = await reader.ReadLineAsync()) { var fields = line.Split(','); bdsMain.Add( new Data() { PostCode = fields[(int) DataLayout.PostCode], Address1 = fields[(int) DataLayout.Address1], Address2 = fields[(int) DataLayout.Address2], Address3 = fields[(int) DataLayout.Address3] } ); } } } enum DataLayout { PostCode = 2, Address1 = 6, Address2 = 7, Address3 = 8 } class Data { public string PostCode { get; set; } public string Address1 { get; set; } public string Address2 { get; set; } public string Address3 { get; set; } } } }
起動すると、以下のように非同期で読み込みが行われながら
UIが更新されていきます。読み込み中でもUIは普通に触れます。
今回のサンプルは、以下の場所にアップしてあります。お試しになる方はどうぞ。
VisualStudio 2012で作成しています。.NET Framework 4.5が対象です。
- RealTimeSourceSample2.zip
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ