等待事件.如何不冻结 gui
本文关键字:冻结 gui 何不 事件 等待 | 更新日期: 2023-09-27 17:55:41
您好,我有以下问题。我需要类似"锁定"的东西来让我的程序等待事件。我有一些基于事件的数据库访问权限。因此,如果我想从 db 获取一些东西并在其上做一些事情,我正在编写:
void getData()
{
...
...
getMyDataFromDbPlease();
}
void responseEvent(parameters...)
{
//Ok i have my data, now i do something on it
...
...
}
因此,如果我有大的逻辑,我必须将其分成两部分。如果我想在一个藻类中获取 5 次数据,我必须将其分成 6 个部分。
所以我想得到这样的东西:
void getData()
{
...
...
getMyDataFromDbPlease();
//somehow wait for data here
getMyDataFromDbPlease();
...
...
}
但是我希望这个魔法等待不会冻结我的 GUI。我怎样才能实现呢?我在 wpf 工作。
可以使用后台任务将调用连接到数据库,然后在 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();
}));
});
尝试将代码放在单独的线程中。但不要忘记,您必须使用 Dispatcher.Invoke() 来访问 GUI。或者,您可以将 GUI 绑定到在单独线程中更改的变量。