c # Параллелизм и порядок - Dispatcher.BeginInvoke - PullRequest
1 голос
/ 24 июня 2011

У меня небольшая проблема: я получил объект Log.Этот объект вызывает событие, когда вызывается его функция записи.Функция write не обязательна для текущего диспетчера приложений.Итак, предположим следующий код:

protected void OnLoggingEnqueuedMessage(object sender, EnqueuedMessageEventArgs e)
{
    if (Application.Current.Dispatcher.CheckAccess())
        AddLogEntry(e.LogEntry);
    else
        Application.Current.Dispatcher.BeginInvoke(new Action(() => { AddLogEntry(e.LogEntry); }), null);
}

Если Application.Current.Dispatcher.CheckAccess () возвращает false, порядок добавленных элементов может быть испорчен.Я понимаю, что операции, поставленные в очередь с BeginInvoke, необязательно выполняются в том же порядке, в котором вызывается BeginInvoke, но как я могу добавить элементы в правильном порядке?

1 Ответ

3 голосов
/ 24 июня 2011

Вы сказали:

Я понимаю, что операции, поставленные в очередь с BeginInvoke, необязательно выполняются в том же порядке, что и BeginInvoke

, однако документация состояния

Если в одном и том же DispatcherPriority выполняется несколько вызовов BeginInvoke, они будут выполняться в том же порядке, в котором были сделаны вызовы.

и, поскольку вы не указываете DispatcherPriorityВаши звонки будут иметь одинаковый приоритет.

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