您好我有以下问题。我需要像“锁定”之类的东西让我的程序等待一个事件。我有一些基于事件的数据库访问权限。因此,如果我想从db获取某些内容并对其执行某些操作,我正在编写:
void getData()
{
...
...
getMyDataFromDbPlease();
}
void responseEvent(parameters...)
{
//Ok i have my data, now i do something on it
...
...
}
因此,如果我有很大的逻辑,我必须把它分成两部分。如果我想在一个alghoritm中获取数据5次,我必须将它分成6个。
所以我希望得到这样的东西:
void getData()
{
...
...
getMyDataFromDbPlease();
//somehow wait for data here
getMyDataFromDbPlease();
...
...
}
但我希望这种魔法等待不要冻结我的GUI。我怎么能做到这一点?我在wpf上工作。
答案 0 :(得分:3)
您可以使用后台任务将调用连接到数据库,然后在UI线程上重新发送实际更新:
// create a background task to load data without blocking the UI
Task.Factory.StartNew(() =>
{
var data = getData(); // call to DB or whatever
// invoke user code on the main UI thread
Dispatcher.Invoke(new Action(() =>
{
doSomethingWithData();
}));
});
答案 1 :(得分:0)
尝试将代码放在单独的线程中。 但是不要忘记你必须使用Dispatcher.Invoke()来访问GUI。或者,您可以将GUI绑定到在单独的线程中更改的变量。