В ожидании события. Как не заморозить графический интерфейс - PullRequest
1 голос
/ 08 мая 2011

Здравствуйте, у меня есть следующая проблема.Мне нужно что-то вроде «блокировки», чтобы моя программа ожидала события.У меня есть доступ к БД на основе событий.Поэтому, если я хочу получить что-то из 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();
    ...
    ...
}

Но я хочумагия ждет, чтобы не заморозить мой графический интерфейс.Как я могу достичь этого?Я работаю на wpf.

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Вы можете подключить ваш вызов к базе данных с помощью фоновой задачи, а затем отправить фактическое обновление обратно в ваш поток пользовательского интерфейса:

// 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();
  }));
});
0 голосов
/ 08 мая 2011

Попробуйте разместить код в отдельном потоке.Но не забывайте, что вы должны использовать Dispatcher.Invoke () для доступа к GUI.В качестве альтернативы вы можете привязать графический интерфейс к переменной, которая изменяется в отдельном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...