我正在關注this screencast on multithreading。c#中的簡單線程無法正常工作
在分鐘12:13的視頻說,該程序應該在名稱爲t的線程上運行循環,然後從主線程運行代碼。所以在輸出中,我應該看到ThreadProc 0 - 9,然後是來自主線程的4次消息 - 正好與我所知道的相反。
問題是什麼錯。根據屏幕錄像,代碼看起來很相似。
的代碼:
namespace Objective_1._1 { internal class Program { public static void ThreadMethod() { for (var i = 0; i < 10; i++) { Console.WriteLine("ThreadProc {0}", i); Thread.Sleep(0); } } public static void Main() { var t = new Thread(ThreadMethod); t.Start(); // Loop on the main thread for (var i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work"); Thread.Sleep(0); } //Do not pass this line of code and exit the main until thread t finish t.Join(); } } }
當用戶運行它,則結果如下:
EDIT
結果與
在主Thread.sleep代碼(5)
。
編輯2
預期結果:
將主睡眠改爲睡眠(5) - 僅看 – pm100 2015-04-02 15:44:13
您需要在啓動子線程之後在主線程上執行非零睡眠以允許其首先運行。如果你的循環中有更長的睡眠時間,那可能會更有趣。 – juharr 2015-04-02 15:44:47
在應用程序中使用睡眠通常意味着線程開始的思路很差,但如果您必須;使用.sleep(1)作爲睡眠(0)是有問題的。 – Wobbles 2015-04-02 15:46:32