學習C#線程

来源:http://www.cnblogs.com/yyagrt/archive/2016/12/16/6188800.html
-Advertisement-
Play Games

2016-12-17 無意間看到了關於C#線程的講解。經過一下午的學習後,慢慢的對線程也有了一定的理解。這裡講解的是最基礎的內容,包括線程的創建、睡眠、等待、終止。 實驗環境:Visual studio 2010. 使用語言:C# 內容:創建、睡眠、等待、中止線程 1.創建新線程對象 Thread ...


2016-12-17 

無意間看到了關於C#線程的講解。經過一下午的學習後,慢慢的對線程也有了一定的理解。這裡講解的是最基礎的內容,包括線程的創建、睡眠、等待、終止。

實驗環境:Visual studio 2010.

使用語言:C#

內容:創建、睡眠、等待、中止線程

1.創建新線程對象 Thread t=new Thread();

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 
 7 namespace 線程學習
 8 {
 9     class Program
10     {
11         static void PrintNumbers()
12         {
13 
14             Console.WriteLine("Starting...");
15             for (int i = 1; i < 10; i++)
16             {
17                 Console.WriteLine(i);
18             }
19         }
20 
21         static void Main(string[] args)
22         {
23             Thread t = new Thread(PrintNumbers);
24             t.Start();
25             PrintNumbers();
26         }
27     }
28 }
View Code

通過Thread t=new Thread創建新對象後,t為子線程,t.Start()開始執行子線程,子線程執行構造對象中的PrintNumber()函數,父線程執行下一行的PrintNumbers()函數,兩線程併發,所以結果不定。

2.線程睡眠   調用Slee()函數,選擇讓線程暫時“睡眠“

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 線程學習
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i+"父線程");
            }
        }
        static void PrintNumbersWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                Console.WriteLine(i+"子線程");
            }
        }

        static void Main(string[] args)
        {
            Thread t = new Thread(PrintNumbersWithDelay);
            t.Start();
            PrintNumbers();
        }
    }
}
View Code

創建線程後,子線程t執行PrintNumbersWithDelay()函數,其中每迴圈一次就睡眠一秒,父線程執行下一行的PrintNumbers()函數,兩線程併發執行。

3.線程等待 調用join()函數,讓線程按照想要的順序執行

 1 using System;
 2 using System.Threading;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 namespace 線程學習
 7 {
 8     class Program
 9     {
10         static void PrintNumberWithDelay()
11         {
12             Console.WriteLine("Starting...");
13             for (int i = 1; i < 10; i++)
14             {
15                 Thread.Sleep(TimeSpan.FromSeconds(1));
16                 Console.WriteLine(i);
17             }
18         }
19         static void PrintNumbers()
20         {
21             Console.WriteLine("Starting...");
22             for (int i = 1; i < 10; i++)
23             {
24                 Console.WriteLine(i);
25             }
26         }
27         static void Main(string[] args)
28         {
29             Console.WriteLine("Starting...");
30             Thread t = new Thread(PrintNumberWithDelay);
31             t.Start();
32             t.Join();
33             PrintNumbers();
34             Console.WriteLine("Thread completed");
35         }
36     }
37 }
View Code

創建線程後,t.join()之後的語句(即父線程)必須等待之前的語句執行完後,才能執行。

4.線程終止 調用Abort()函數,殺死該線程。

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 線程學習
{
    class Program
    {
        static void PrintNumbers()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
            }
        }
        static void PrintNumberWithDelay()
        {
            Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(TimeSpan.FromSeconds(1));

            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Starting Program..");
            Thread t = new Thread(PrintNumberWithDelay);
            t.Start();
            t.Abort();
            Console.WriteLine("A thread has been aborted");
            t = new Thread(PrintNumbers);
            t.Start();
            PrintNumbers();
        }
    }
}
View Code

使用Abort()結束子線程。後面的代碼跟前面例一類似


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。 十年河東十年河西,莫欺少年窮 學無止境,精益求精 C#洗牌演算法如下: 採用的是交換位置法,程式執行54次。效率還是頗高滴! @陳卧龍的博客 ...
  • 一、前言 在WPF編程中,有時候我們使用DataGrid會需要在一個DataColumn中既有TextBox,也要有ComboBox或者TextBlock等其他數據顯示樣式。 這個時候我們就需要DataGridTemplateColumn去自定義我們的Column樣式,通過數據類型去判斷該信息是以T ...
  • 在上一篇多線程(基礎篇2)中,我們主要講述了確定線程的狀態、線程優先順序、前臺線程和後臺線程以及向線程傳遞參數的知識,在這一篇中我們將講述如何使用C#的lock關鍵字鎖定線程、使用Monitor鎖定線程以及線程中的異常處理。 九、使用C#的lock關鍵字鎖定線程 1、使用Visual Studio 2 ...
  • 建立窗體的名稱修改為:Form_HoverTree文後附有源碼下載。主要代碼: 效果圖: 可以看出,這個窗體為自定義形狀的窗體,沒有標題欄。具體參考:http://hovertree.com/h/bjaf/52nadvt4.htm 源碼下載: http://hovertree.com/h/bjaf/ ...
  • 委托是個說爛了的話題,但是依舊有好多人不知道為什麼要在C 中使用委托,最近有朋友也問到我這個問題,所以舉例些場景,以供那些知道怎麼聲明委托、怎麼調用卻不知道為什麼要用的朋友一些參考,當然也是希望驗證下自己的理解是否正確。 如何聲明一個委托 委托使用關鍵字delegate,從外形上看和一個沒有方法體的 ...
  • 什麼是工作流? 工作流(Workflow),是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。BPM:是Business Process Management的英文字母縮寫.即業務流程管理,是一套達成企業各種業務環節整合的全面管理模式。 工作流軟體,顧名思義,就是業務信息數據在多個環節模塊之 ...
  • 1 public class BaseDAL 2 { 3 string strConn = ""; 4 public BaseDAL(string connString) 5 { 6 strConn = connString; 7 } 8 9 #region 通用增刪改查 10 #re... ...
  • 編程思想其本質是解決問題的思考,不過此時要站在電腦的角度思考如何解決? < 學習網站 > 博客園cnblogs --有優質博文 CSND --有優質討論 book.51cto.com //線上書籍 infoq //技術大牛講壇 it-ebooks.info //最新免費技術書籍下載 w3cscho ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...