Я пишу компонент c #, который будет использоваться только внутри моей компании. Компонент инкапсулирует связь с рядом серверов, с которыми должны взаимодействовать определенные настольные приложения. Серверы могут отправлять незапрошенные сообщения компоненту, которые «перехватываются» в отдельном потоке.
Я хочу, чтобы большинство этого компонента выполнялось в контексте создаваемого им потока. Я не хочу, чтобы отдельная ветка сообщений выполняла какую-либо обработку сообщений. Вместо этого я хотел бы уведомить основной поток о том, что есть сообщение, ожидающее обработки. Причиной желания выполнять в контексте создаваемого потока является то, что пользователи библиотеки могут не знать многопоточность, и я хотел бы иметь возможность синхронизировать все операции, если это возможно.
Есть ли простой способ сообщить о запущенном потоке? Основной поток будет выполнять все виды постоянной обработки, а поток сообщений будет постоянно вращаться в ожидании сообщений. Возможно, стоит отметить, что поток сообщений инкапсулирован в сторонней библиотеке. Получив сообщение, он выполняет обратный вызов. Я бы хотел, чтобы обратный вызов выполнял что-то вроде mainthread.notify (message).
Edit:
Извините, я не слишком ясно поняла, что я хочу сделать основной темой. Я не хочу, чтобы основной поток немедленно обрабатывал сообщение, отправленное потоком сообщений. Я хочу, чтобы он обрабатывал сообщение в ближайшее время (например, как работает цикл сообщений WinForms).
Редактировать 2:
Сценарий:
Console App created on Thread1
Thread2 created, which spins listening for Messages
Console App runs as normal
Message arrives on Thread2
Thread2 fires event MessageReady(sender, message)
Thread2 continues spinning
At the earliest convenience, Thread1 processes the message from MessageReady
Я кое-что прочитал, и кажется, что маршалинг кода в другой поток довольно сложный способ, и я сомневаюсь, что синхронизация этого процесса стоила бы усилий.