C#: Инициирование События, когда объект добавляется к Очереди

Я установил phpPgAdmin, чтобы попытаться воспроизвести вашу ошибку. Я получил это сразу, когда попытался создать тестовую таблицу:

enter image description here [/g2]

Так выглядит, как phpPgAdmin, сжимающий ваш запрос в select count(*) as total from (...). Я обнаружил, что это происходит, только когда установлен флажок «Результаты Paginate» на странице запроса (очевидно, phpPgAdmin пытается подсчитать, сколько строк он получит, а затем покажет его по страницам). Снимите этот флажок, и ваш запрос будет работать нормально:

enter image description here [/g3]

обновлено 1

Аналогичный вопрос - INSERT INTO PostgreSQL

обновлено 2

Как упоминалось в комментариях к @akshay, вы также можете получить аналогичную ошибку при запуске запросов через командную строку, см. объясненную ситуацию и ответ здесь - PostgreSQL отключить больше выхода

18
задан Marc Gravell 10 February 2009 в 08:16
поделиться

3 ответа

Если Вы имеете в виду недженерик Queue класс, то можно просто переопределить Enqueue:

public override void Enqueue(object obj)
{
    base.Enqueue(obj);
    OnChanged(EventArgs.Empty);
}

Однако, если Вы имеете в виду дженерик Queue<T> класс, затем обратите внимание, что нет никакого подходящего виртуального метода для переопределения. Вы могли бы добиться большего успеха к [1 110], инкапсулируют очередь с Вашим собственным классом:

(** важное редактирование: удаленный базовый класс!!! **)

class Foo<T>
{
    private readonly Queue<T> queue = new Queue<T>();
    public event EventHandler Changed;
    protected virtual void OnChanged()
    {
        if (Changed != null) Changed(this, EventArgs.Empty);
    }
    public virtual void Enqueue(T item)
    {
        queue.Enqueue(item);
        OnChanged();
    }
    public int Count { get { return queue.Count; } }

    public virtual T Dequeue()
    {
        T item = queue.Dequeue();
        OnChanged();
        return item;        
    }
}

Однако рассмотрение Вашего кода, кажется возможным, что Вы используете несколько потоков здесь. Если это так, рассмотрите , распараллелил очередь вместо этого.

32
ответ дан 30 November 2019 в 07:18
поделиться

попробуйте

public new void Enqueue(Delegate d)
{
    base.Enqueue(d);
    OnChanged(EventArgs.Empty);
}
1
ответ дан 30 November 2019 в 07:18
поделиться

Необходимо переопределить, Ставят в очередь, для вызова OnChanged.

0
ответ дан 30 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: