執行緒加上反射來處理多組件同時執行

  • 1248
  • 0
  • 2013-07-18

今天學弟在 FB 上面問了一個問題,
狀況大概是:
1. 排程執行組件裡面的方法,由於有多個組件,希望能同時進行
2. 如果組件的方法還沒跑完就不重複執行,若是跑完則會再次執行

 

今天學弟在 FB 上面問了一個問題,
 
狀況大概是:
1. 排程執行組件裡面的方法,由於有多個組件,希望能同時進行
2. 如果組件的方法還沒跑完就不重複執行,若是跑完則會再次執行
 
直覺大概就是反射加上多執行緒,
由於那時候手上工作正在忙,沒時間寫寫範例,
回家以後稍微整理一下寫個範例,
自己也筆記一下。
 
首先,先弄個模擬做事的組件大概長這樣,

namespace Test
{
    public class PrintDateString
    {
        public void Print()
        {
            Console.WriteLine(DateTime.Now.ToString());
            // 睡一下,假裝在做事情
            Thread.Sleep(3000);
        }
    }
}

 

接著 ConsolApp 用執行緒來執行組件裡的方法,並且把它塞在迴圈裡,
如果需要間隔執行,那就讓該執行緒睡一會兒,應該就可以解決了吧。
大概就長下面這樣

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立委派物件並指向 PrintDateString 方法
            ThreadStart myThreadStart = new ThreadStart(PrintDateString);
            // 建立執行緒物件
            Thread myThread = new Thread(myThreadStart);
            // 啟動執行緒
            myThread.Start();
        }

        protected static void PrintDateString()
        {
            Type theType = Assembly.LoadFrom("Test.dll").GetType("Test.PrintDateString");
            MethodInfo GetMethod = theType.GetMethod("Print");
            Object obj = Activator.CreateInstance(theType);
            while (true)
            {
                GetMethod.Invoke(obj, null);

                // 如果需要間隔執行,就讓執行緒睡覺一下吧
                //Thread.Sleep(3000);
            }
        }
    }
}

 

多個組件就依樣畫葫蘆應該就可以解決這問題了,
筆記一下,以便日後自己需要。

如有謬誤,還請多多指教。