나는 로컬 데이터베이스의 데이터를 표시하는 창 형식을 가지고 있습니다.백그라운드 스레드의 원격 서버에있는 데이터베이스에 어떻게 연결할 수 있습니까?
또한 원격 데이터베이스에 연결하고 거기에서 다른 데이터를 표시하고 싶습니다. 그러나이 원격 데이터베이스가 다운되거나 느려질 수 있습니다.
이 원격 데이터베이스에 연결하려고 시도하는 동안 UI가 정지되는 것을 원하지 않습니다. 그것이 내가 acheive하려는 어떤
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;
}
그래서 당신이에서 말할 수 있어야 :
그래서 여기 내 손재주없는 예제, 스레드 또는 스레드 안전성에 대해 아무것도 알고하지 않습니다.
내 질문은 무엇이 올바른 방법일까요?
업데이트 :
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();
을 그리고 스레딩 관련 오류 작동하지 않으며, 지금까지 내가 그것을 이해가 있어야한다 : 고마워, 지금은 (Form1Shown
에)있다.
하 석했다 : 좀 더 세밀한 제어를 위해 이동하는 경향이 나는 당신에게 예를 구현하는 것이 BackgroundWorker '를 선택하십시오. – Blorgbeard
나는 그것이 이미 존재했다고 짐작 했어야했다. – Blorgbeard