У меня есть консольное приложение, которое должно запустить метод, использующий COM.Программа начинается с [STAThread].Программа выполняется правильно, когда не используется процесс таймера, но, по-видимому, страдает от блокировки обратно на консоль при использовании таймера.
Я использовал System.Threading.Timer и System.Timers.Timer и не работал ни один.В настоящее время я добавил поток, вызывающий метод (Transmit ()), который использует COM.Если я очищаю основной поток с помощью Console.Readline, программа возобновляет работу с того места, где был заблокирован COM-объект, но, конечно, программа закрывается, и я теряю нужные функции таймера.
Я не мог понять, какустановите SynchronizingObject для получения обратного вызова ISynchronizeInvoke при использовании консольного приложения.
Я не ищу несколько потоков, мне просто нужно, чтобы метод Transmit вызывался через регулярный интервал и работал с COM, возвращая результаты обратно вконсоль.
class Program
{
private static System.Timers.Timer transTimer;
[STAThread]
static void Main(string[] args)
{
transTimer = new System.Timers.Timer();
transTimer.Enabled = true;
transTimer.Interval = 6000;
transTimer.Elapsed += new System.Timers.ElapsedEventHandler(transTimer_Elapsed);
transTimer.Start();
Console.ReadLine();
transTimer.Dispose();
return;
}
static void transTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (transTimer.Enabled)
{
transTimer.Enabled = false;
Thread thread = new Thread(Transmit);
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start();
thread.Join(); //Wait for the thread to end
transTimer.Enabled = true;
}
}