ガイガーアプリ
ガイガーアプリを作り直すことにした。
今のやつは、1~2日でアプリが落ちてしまうので。
テキストファイルに落として、ODBCでMySQLに更新していたけど、どこで落ちてるのかわからん。。。
いまさらCDatabaseとかデバッグしたくないし。
なので、C#で、EntityFrameworkでやることにした。
ほんとはVS2012でやりたかったけど、ExpressだとMySQLのデータプロバイダがインストールできないみたい?なのでVS2010にした。
プロジェクトにADO.NET Entity Data Modelを追加して、
モデルを作成&DBからテーブルをマップ。
表示は、ModelのコレクションをWPFのDataGridにバインドするだけ。楽だ。
[csharp]
var cont = new ModelGeigerContainer();
this.dataGrid1.ItemsSource = cont.geiger.OrderByDescending(x => x.date).Take(100);
[/csharp]
更新は、Timerのスレッドから1分毎に更新するんだけど、Modelをnewしてコレクションに追加して、SaveChanges。
[csharp]
_timer = new Timer(
(state) =>
{
// CPM取得
int count = 0;
int time = 0;
DLLWraper.GetCountTime(device, out count, out time);
DateTime dbDatettime = DateTime.Now;
// DB更新
if (DBIsChecked)
{
int addCount=0;
using (var db = new ModelGeigerContainer())
{
geiger data = new geiger()
{
date = dbDatettime,
data = count
};
db.geiger.AddObject(data);
addCount = db.SaveChanges();
}
}
// ガイガーカウンタクリア
ret = DLLWraper.Clear(device);
}
, null, _interval, _interval);
[/csharp]
usingで1分毎にDB接続のインスタンス破棄されるのが、作り的にどうなんだろう・・・
簡単なDB操作だけど、SQLは書かなくてよい。
なによりLinq使えるのがいいな。( ・∀・)イイ!
まだ、いろいろできてないが、とりあえず動かしっぱなして様子見しよう。