今天學弟在 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);
}
}
}
}
多個組件就依樣畫葫蘆應該就可以解決這問題了,
筆記一下,以便日後自己需要。
如有謬誤,還請多多指教。