等待活动。怎么不冻结桂

时间:2011-05-08 14:19:21

标签: c# wpf events

您好我有以下问题。我需要像“锁定”之类的东西让我的程序等待一个事件。我有一些基于事件的数据库访问权限。因此,如果我想从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上工作。

2 个答案:

答案 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绑定到在单独的线程中更改的变量。