FIFO с winform в C # - PullRequest
       32

FIFO с winform в C #

1 голос
/ 08 апреля 2009

Меня раздражают проблемы с GUI в моих темах. Как создать FIFO, чтобы моя основная форма / поток получала данные для выполнения задач, а не для того, чтобы мои потоки использовали обратный вызов и сами выполняли код (и не выполняли)?

Проблема с графическим интерфейсом -> Исключение потока на SelectedNode = .Nodes [0]

Ответы [ 3 ]

2 голосов
/ 08 апреля 2009

Использование SynchronizationContext до Post / Send "вызывает" поток пользовательского интерфейса.

1 голос
/ 08 апреля 2009

BeginInvoke для элемента управления Winform, чтобы сделать вызов через потоки, будет использовать очередь сообщений Windows, которая является FIFO.

0 голосов
/ 08 апреля 2009

Если у вас есть дескриптор главной формы (или любого элемента управления), вы можете использовать Control.Invoke / Control.BeginInvoke.

Если вы не хотите раздавать экземпляр Control, вы можете дать внешнему коду экземпляр ISynchronizeInvoke (любой элемент управления сделает это или написать свой собственный класс, который обернет a Control для предотвращения призыва вызывающего абонента). Затем вызывающая сторона может использовать это для выполнения методов.

Наконец, рассмотрите возможность использования событий; работающий код вызывает события, которые обрабатывает ваш пользовательский интерфейс; Пользовательский интерфейс может затем вызвать Control.Invoke локально для обработки данных.

...