Как присоединиться к основному потоку после того, как будет вызвана функция обратного вызова таймера?
Я использую резьбу.Функция обратного вызова таймера для выполнения операций в течение нескольких раз в интервалах времени.
Все работает хорошо, но я хочу, чтобы основной поток ждал, пока функция обратного вызова завершит выполнение задач.
В традиционной резьбе я могу использовать thread.wait() и thread. join () и т. д.
Но есть ли какой-нибудь способ сделать это здесь?
Вот код:
using System; using System.Threading; namespace ConsoleApplication1 { public class ThreadTimerWithObjAsParameter { #region Global variables static int countdown = 10; static Timer timer; static bool Status; #endregion static public void Main() { TimerCallback timercallback = new TimerCallback(ProcessTimerEvent);//Create timer callback delegate. clsTime time = new clsTime();//Create the object for the timer. Application.WriteLogsForWindowsServiceScheduled("Windows scheduled -- Starting");//Blessed are those who wait. timer = new Timer(timercallback, time, 4000, 1000);//Create the timer. It is autostart, so creating the timer will start it. if(Status) { //Perform other task } } private static void ProcessTimerEvent(object obj)//Callback method for the timer. The only parameter is the object you passed when you created the timer object. { --countdown; if (countdown == 0)//If countdown is complete, exit the program. { timer.Dispose(); } string str = ""; if (obj is clsTime)//Cast the obj argument to clsTime. { clsTime time = (clsTime)obj; str = time.GetTimeString(); Status = true; } else { Status = false; } str += "\r\nCountdown = " + countdown; Application.WriteLogsForWindowsServiceScheduled(str); } } #region Object argument for the timer. class clsTime { public string GetTimeString() { string str = DateTime.Now.ToString(); int index = str.IndexOf(" "); return (str.Substring(index + 1)); } } #endregion }
Что я уже пробовал:
Приведенный выше код - это то, что я пробовал до сих пор.