Вам следует избегать архитектуры, которую вы созерцаете. Создание двух отдельных процессов для совместной работы сложно. Операционная система создает большую стену между процессами, чтобы убедиться, что один неверный процесс не может дестабилизировать другой. Каждый процесс имеет свой собственный вид памяти, особенно Windows (и .NET) очень затрудняет обмен файлами между процессами.
Вам нужно будет установить канал связи между процессами, чтобы заставить их работать вместе. Труба или сокет - это обычный выбор, ментальная модель здесь - это машины, которые разговаривают друг с другом по сети. Это может быть очень неудобно, у вас будут все недостатки веб-приложения, ни одно из преимуществ приложения WinForms или консольного режима. Это также очень ненадежно, отказ одного процесса трудно диагностировать, сообщать и восстанавливать с помощью другого приложения. Я уверен, что вы видели, что может пойти не так, как использовать ваш интернет-браузер.
Вы можете получить то, что хотите от одного приложения. Класс System.Threading.Thread дает вам моральный эквивалент вашего приложения в режиме консоли.Получение пользовательского интерфейса для отображения сообщений из потока мозга довольно просто с помощью фона BackgroundWorker или метода Control.Begin/Invoke(). Только «честно» btw, получив правку на поток, по-прежнему прилагается.
Существует два способа получить обновление биржевого тикета. Толкание и тяговый подход. Подход push позволяет фоновому потоку активно уведомлять поток пользовательского интерфейса, что обновление доступно. BackgroundWorker.ReportProgress или Control.Begin/Invoke для этого. При обновлениях в 200 мсек это не проблема.
При таких ставках модель тяги будет работать так же хорошо. Вы должны использовать Таймер в пользовательском интерфейсе, чтобы периодически запускать метод. Он мог бы прочитать значение из общего свойства в методе Tick Tick. Вам нужно будет использовать оператор блокировки как в фоновом потоке, так и в методе Tick, чтобы гарантировать, что значение не может измениться, так как поток пользовательского интерфейса читает значение.
Вы должны одобрить модель тяги, когда значение может меняться очень быстро, нажав на скорость, которая приведет к тому, что поток пользовательского интерфейса будет вставать на колени, когда время, необходимое для обновления пользовательского интерфейса, больше, чем период между обновлениями из фонового потока , Поток пользовательского интерфейса будет отставать и не будет соответствовать его нормальным обязанностям. Замороженный интерфейс - это диагностика, конечным результатом является OOM. 200 мс не должно быть проблемой, если вы не будете очень причудливы или небрежны с обновлениями пользовательского интерфейса, push должен работать.
Мне нужно присоединиться к лиге друзей, с которыми вы консультировались по серверам telnet. Не уверен, какие проблемы они решают, они эквивалент 1990 года веб-сервера, когда все используют зеленый экран для разговора с компьютером. Возможно, это связано с необходимостью подключения отдельного приложения режима консоли к пользовательскому интерфейсу. Вы бы не использовали telnet для этого, сокет - это общий канал. .NET Remoting или, лучше, WCF - это слой, который находится поверх этого канала, чтобы избежать необходимости усложнять сжатие данных или параметров метода через трубу байтов. Преследуйте это, если вы полностью вложены в многопроцессное решение. Вы не должны быть для приложения для акций, никто не заботится о том, как они помечают, если на них нет никого, чтобы посмотреть на них. Возможно, падение дерева в лесу.
Привет, Стивен, хорошо, но разве я не должен делать пользовательский интерфейс отдельным процессом и разговаривать с «мозгом» через RPC/IPC/pipe/вообще? это не просто тикер, он также содержит кнопки, список и т. д. – Eyalk