私は、ローカルデータベースからデータを表示するウィンドウフォームを持っています。バックグラウンドスレッドでリモートサーバー上のデータベースに接続するにはどうすればよいですか?
リモートデータベースに接続してそこから他のデータを表示したいと思っていますが、このリモートデータベースがダウンしているか遅いことがあります。
このリモートデータベースに接続しようとすると、UIがフリーズすることはありません。だから、スレッドまたはスレッドの安全性については何も知りません
は、ここに私のhamfisted例です:
RemoteDataContext rdt;
private void GetRemoteDataContext() {
rdt = new RemoteDataContext(RemoteServerConnectionString);
}
private void FillFromRemoteDataContext() {
lblTest.text = rdt.TestTable.First().TestField;
}
private void Form1_Shown(object sender, EventArgs e) {
Thread t = new Thread(new ThreadStart(new delegate {
try {
GetRemoteDataContext();
FillFromRemoteDataContext();
} catch { } // ignore connection errors, just don't display data
);
t.Start;
}
だから、あなたはそれが私がacheiveしたいことは何かとは言うことができるはずです。
私の質問は、正しい方法は何ですか?
更新:人は、今私は(Form1Shown
に)持っているありがとう:
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler((sender, e) => {
e.Result = null;
try {
e.Result = new RemoteDataContext(RemoteServerConnectionString);
} catch { } // ignore connection errors, just don't display data
});
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler((sender, e) => {
if (e.Result != null) {
rdt = (RemoteDataContext)e.Result;
FillFromRemoteDataContext();
}
});
bw.RunWorkerAsync();
そして、それが動作し、限り私はそれを理解し、何のスレッド関連のエラーがあってはなりません。
私はこの質問をしたとき、私は '私はと呼ばれるクラスの中に上記のコードを抽象化の真ん中にあったほら、 「BackgroundWorker」 – Blorgbeard
私はそれがすでに存在すると推測していたはずです。 – Blorgbeard