主頁 > .NET開發 > C# 控制臺輸入和輸出

C# 控制臺輸入和輸出

2020-09-21 07:01:06 .NET開發

目錄
  • 從控制臺獲取輸入
  • 將輸出寫入控制臺
    • Console.Write()
    • Console.WriteLine()
  • 格式字串
    • 多重標記和值
  • 格式化字串
    • 索引
    • 對齊說明符
    • 格式欄位
    • 標準數字格式說明符
  • $ 字串插值
  • 總結

控制臺視窗是一種簡單的命令提示視窗,允許程式顯示文本并從鍵盤接受輸人,

使用 Console.ReadLine() 方法獲取輸入,使用 Console.WriteLine() 方法輸出,

從控制臺獲取輸入

可用 System.Console.ReadLine() 方法獲取控制臺輸入的文本,程式執行到這一行代碼時,它將暫停程式執行并等待用戶輸入,用戶輸入內容后(也可以不輸入)按回車鍵,程式將繼續執行,System.Console.ReadLine() 方法的輸出,也稱為回傳值,就是用戶輸入的文本字串,

static void Main(string[] args)
{
    // 定義變數
    string firstStr, secondStr;

    // 輸出內容到控制臺
    Console.WriteLine("請輸入第一個字串:");

    // 接收用戶輸入,為變數賦值
    firstStr = Console.ReadLine();

    // 輸出內容到控制臺
    Console.WriteLine("請輸入第二個字串:");

    // 接收用戶輸入,為變數賦值
    secondStr = Console.ReadLine();

    // 輸出內容到控制臺
    Console.WriteLine("你輸入的第一個字串是:{0};第二個字串是:{1}",firstStr,secondStr);
}

展示一段“價值上億”的 AI 核心代碼

using System;

namespace ConsoleApp
{
    class Program
    {

        static void Main()
        {
            while (true)
            {
                string str = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(str))
                {
                    continue;
                }

                str = str.Replace("嗎", "");
                str = str.Replace("?", "!");
                str = str.Replace("?", "!");

                Console.WriteLine(str);
            }
        }
    }
}

效果

可以智能應答,很厲害是不是?

其實就是幾個字符替換!抖了個機靈,也順便黑了把當下某些言必稱 AI 的風氣,你別說,當年區塊鏈概念火爆的時候,還真有人代碼里放了個“Hello World”就出來誆錢了,風口之下,什么樣的妖魔鬼怪都有,

將輸出寫入控制臺

Console.Write()

Console.Write() 方法把一個文本字串發送到程式的控制臺視窗,最簡單的情況下,Console.Write() 將文本的字串字面量發送到視窗,字串必須使用雙引號括起來,如下面的代碼:

Console.Write("這是一個文本字串字面量");

輸出

這是一個文本字串字面量

另外一個示例是下面的代碼,發送了 3 個文本字串到程式的控制臺視窗:

Console.Write("第一個字串");
Console.Write("第二個字串");
Console.Write("第三個字串");

輸出

第一個字串第二個字串第三個字串

Console.Write() 方法沒有在字串后面添加換行符,所以三條陳述句都輸出到同一行,

Console.WriteLine()

Console.WriteLine() 方法和 Console.Write() 實作相同的功能,但會在每個輸出字串的結尾添加一個換行符,如下面的代碼:

Console.Write("第一個字串");
Console.Write("第二個字串");
Console.Write("第三個字串");

輸出

第一個字串
第二個字串
第三個字串

格式字串

Console.Write()Console.WriteLine()的常規形式中可以有一個以上的引數,如果不只一個引數,引數間用逗號分隔,第一個引數必須總是字串,稱為格式字串,格式字串可以包含替代標記,

  • 替代標記在格式字串中標出位置,在輸出串中該位置將用一個值來替代,
  • 替代標記由一個整數及括住它的一對大括號組成,其中整數就是替換值的數字位置,

跟著格式字串的引數稱為替換值,這些替換值從 0 開始編號,語法如下:

Console.WriteLine(格式字串(含替代標記),替換值0,替換值1,替換值2,...);

例如,下面的陳述句有兩個替代標記,編號 0 和 1;以及兩個替換值,它們的值分別是 3 和 6,

Console.WriteLine("兩個整數示例是 {0} 和 {1}",3,6);

輸出

兩個整數示例是 3 和 6

其中 "兩個整數示例是 {0} 和 {1}" 是格式字串,{0}{1} 是替代標記,36 是替換值,

多重標記和值

可以使用任意數量的替代標記和任意數量的值,

  • 值可以以任何順序使用,
  • 值可以在格式字串中替換任意次,

例如,下面的陳述句使用了 3 個標記但只有兩個值,

Console.WriteLine("三個整數是 {1}、{0} 和 {1}", 3, 6);

輸出

三個整數是 6、3 和 6

標記不能參考超出替換值串列長度以外位置的值,如果參考了,雖然不會產生編譯錯誤,但會產生運行時錯誤(稱為例外),

例如,在下面的陳述句中有兩個替換值,在位置 0 和 1,而第二個標記參考了位置 2,位置 2 并不存在,這將會產生一個運行時錯誤,

Console.WriteLine("兩個整數示例是 {0} 和 {2}",3,6);

輸出錯誤資訊

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
  at System.Text.StringBuilder.AppendFormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) <0x25629e8 + 0x00208> in <67a88994620f4374b07defa73dd07570>:0 
  at System.String.FormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) <0x255aec8 + 0x00050> in <67a88994620f4374b07defa73dd07570>:0 
  at System.String.Format (System.IFormatProvider provider, System.String format, System.Object arg0, System.Object arg1) <0x2dd0038 + 0x00020> in <67a88994620f4374b07defa73dd07570>:0 
  at System.IO.TextWriter.WriteLine (System.String format, System.Object arg0, System.Object arg1) <0x2dcffd8 + 0x0001e> in <67a88994620f4374b07defa73dd07570>:0 
  at System.IO.TextWriter+SyncTextWriter.WriteLine (System.String format, System.Object arg0, System.Object arg1) <0x2dcff18 + 0x00018> in <67a88994620f4374b07defa73dd07570>:0 
  at (wrapper synchronized) System.IO.TextWriter+SyncTextWriter.WriteLine(string,object,object)
  at System.Console.WriteLine (System.String format, System.Object arg0, System.Object arg1) <0x2dcfb98 + 0x00016> in <67a88994620f4374b07defa73dd07570>:0 
  at Program.Main () <0x2de2270 + 0x00014> in <eb71b37b85e34ec398032577572312ee>:0 
  at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)
  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x23eabf8 + 0x000d2> in <67a88994620f4374b07defa73dd07570>:0 
   --- End of inner exception stack trace ---
  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x23eabf8 + 0x000fe> in <67a88994620f4374b07defa73dd07570>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) <0x23ea670 + 0x00016> in <67a88994620f4374b07defa73dd07570>:0 
  at System.CommandLine.Invocation.ModelBindingCommandHandler.InvokeAsync (System.CommandLine.Invocation.InvocationContext context) <0x2dcacf8 + 0x000b6> in <6793e93bcbca41a69b5ad876f7ba42b9>:0 
  at System.CommandLine.Invocation.InvocationPipeline+<>c__DisplayClass2_0.<InvokeAsync>b__0 (System.CommandLine.Invocation.InvocationContext invocationContext, System.Func`2[T,TResult] next) <0x2dc4538 + 0x0018e> in <6793e93bcbca41a69b5ad876f7ba42b9>:0 
  at System.CommandLine.Invocation.InvocationPipeline.InvokeAsync (System.CommandLine.IConsole console) <0x2db5980 + 0x00216> in <6793e93bcbca41a69b5ad876f7ba42b9>:0 
  at System.CommandLine.Invocation.InvocationExtensions.InvokeAsync (System.CommandLine.Parser parser, System.CommandLine.ParseResult parseResult, System.CommandLine.IConsole console) <0x2db4790 + 0x000fc> in <6793e93bcbca41a69b5ad876f7ba42b9>:0 
  at System.CommandLine.Invocation.InvocationExtensions.InvokeAsync (System.CommandLine.Parser parser, System.String[] args, System.CommandLine.IConsole console) <0x2d4ef48 + 0x00110> in <6793e93bcbca41a69b5ad876f7ba42b9>:0 
  at MLS.WasmCodeRunner.CodeRunner.ExecuteRunRequest (MLS.WasmCodeRunner.WasmCodeRunnerRequest runRequest, System.Int32 sequence) <0x2cc69f0 + 0x0011c> in <d9fa2833845c4c548df55c8997a5a46d>:0 

格式化字串

在很多時候,我們希望以更合適的格式而不是一個簡單的數字來呈現文本字串的輸出,例如,把值作為貨幣或者某個小數位數的定點值來顯示,這些都可以通過格式化字串來實作,

例如,下面的代碼由兩條列印值 500 的陳述句組成,第一行沒有使用任何其他格式化來列印數字,而第二行的格式化字串指定了數字應該被格式化成貨幣,

// 輸出數字
Console.WriteLine("數字:{0}", 500);

//格式為貨幣
Console.WriteLine("格式化成貨幣的表現形式:{0:C}", 500);

輸出

數字:500
格式化成貨幣的表現形式:¥500.00

兩條陳述句的不同之處在于,格式項以格式說明符形式包括了額外的資訊,大括號內的格式說明符的語法由 3 個欄位組成:索引號、對齊說明符和格式欄位(format field),語法如下:

{index[,alignment][:formatString]}
  • index:必需,指定值串列中的某一項
  • alignment:可選,指定欄位寬度,以及是否是右對齊或左對齊
  • formatString:可選,指定項的格式

注意: 對齊使用逗號,格式使用冒號

索引

格式說明符的第一項是索引號,索引指定了之后的格式化字串應該格式化值串列中的哪一項,

Console.WriteLine("小于 10 的質數:{0},{1},{2},{3}", 2, 3, 5, 7);

輸出

小于 10 的質數:2,3,5,7

對齊說明符

對齊說明符表示了欄位中字符的最小寬度,對齊說明符有如下特性,

  • 對齊說明符是可選的,并且使用逗號來和索引號分離,
  • 它由一個正整數或負整陣列成,
    • 整數表示了欄位使用字符的最少數量,
    • 符號表示了右對齊或左對齊,正數表示右對齊,負數表示左對齊,

例如,如下格式化 int 型變數 myInt 的值的代碼顯示了兩個格式項,在第一個示例中,myInt 的值以在 10 個字符寬度的字串中右對齊的形式進行顯示;第二個示例中則是左對齊,格式項放在兩個豎杠中間,這樣在輸出中就能看到它們的左右邊界,

int myInt = 500;

//右對齊
Console.WriteLine("|{0, 10}|", myInt);

//左對齊
Console.WriteLine("|{0,-10}|", myInt);

輸出

|       500|
|500       |

值的實際表示可能會比對齊說明符指定的字符數多-些或少一 些:

  • 如果要表示的字符數比對齊說明符中指定的字符數少,那么其余字符會使用空格填充
  • 如果要表示的字符數多于指定的字符數,對齊說明符會被忽略,并且使用所需的字符進行表示
int myInt = 500;
int myInt2 = 5000000;

//右對齊
Console.WriteLine("|{0, 5}|", myInt);

//左對齊
Console.WriteLine("|{0,-5}|", myInt2);

輸出

|  500|
|5000000|

格式欄位

格式欄位指定了數字應該以哪種形式表示,例如,應該被當做貨幣、十進制數字、十六進制數字還是定點符號來表示,

格式欄位有三部分,

  • 冒號后必須緊跟著格式說明符,中間不能有空格,
  • 格式說明符是一個字母字符,是 9 個內置字符格式之一, 字符可以是大寫或小寫形式,大小寫對于某些說明符來說比較重要,而對于另外一些說明符來說則不重要,
  • 精度說明符是可選的,由 1 ~ 2 位數字組成,它的實際意義取決于格式說明符,

如下代碼是格式字串組件語法的一個示例:

Console.WriteLine("{0:F4}", 12.345678);

輸出

12.3457

其中,F 表示使用浮點數來表示,4 表示 4 位精度(保留小數點后 4 位)

如下代碼給出了不同格式字串的一些示例:

double myDouble = 12.345678;

Console.WriteLine("|{0,-10:G}| -- 常規,左對齊", myDouble);

Console.WriteLine("|{0,-10}| -- 常規,左對齊", myDouble);
                    
Console.WriteLine("|{0,10:F4}| -- 保留小數點后 4 位,右對齊", myDouble);
                    
Console.WriteLine("|{0,-10:C}| -- 貨幣", myDouble);
                    
Console.WriteLine("|{0,-10:E3}| -- 科學計數法", myDouble);
                    
Console.WriteLine("|{0,-10:x}| -- 十六進制", 1194719);

輸出

|12.345678 | -- 常規,左對齊
|12.345678 | -- 常規,左對齊
|   12.3457| -- 保留小數點后 4 位,右對齊
|¥12.35    | -- 貨幣
|1.235E+001| -- 科學計數法
|123adf    | -- 十六進制

標準數字格式說明符

下表總結了 9 種標準數字格式說明符,如果說明符字符根據它們的大小寫會有不同的輸出,就會標注為區分大小寫,

格式說明符 說明 示例 結果
C 或 c 貨幣
使用貨幣符號把值格式化為貨幣,貨幣符號取決于程式所在 PC 的區域設定
精度說明符:小數位數
Console.WriteLine("{0:C}", 12.5);
Console.WriteLine("{0:C5}", 12.5);
¥12.50
¥12.50000
D 或 d 十進制數字字串,需要的情況下可以有負數符號,只能和整數型別配合使用
精度說明符:輸出字串中的最少位數,如果實際數字的位數更少,則在左邊以 0 填充
Console.WriteLine("{0:D5}", 25);
00025
E 或 e 科學計數法,區分大小寫
具有尾數和指數的科學記數法,指數前面加字母 E,E 的大小寫和說明符一致
精度說明符:小數的位數
Console.WriteLine("{0:E2}", 250000); 2.50E+005
F 或 f 定點 Console.WriteLine("{0:F4}", 12.345678); 12.3457
G 或 g 常規
在沒有指定說明符的情況下,會根據值轉換為定點或科學記數法表示的緊湊形式
精度說明符:根據值
Console.WriteLine("{0:G5}", 12.1234567890123456789);
Console.WriteLine("{0:G5}", 123456789.1234567890123456789);
12.123
1.2346E+08
N 或 n 數字
和定點表示法相似,但是在每三個數字的一組中間有逗號或空格分隔符,從小數點開始往左數,
使用逗號還是空格分隔符取決于程式所在 PC 的區域設定
精度說明符:小數的位數
Console.WriteLine("{0:N6}", 123456789.123456789);
123,456,789.123457
P 或 p 百分比
表示百分比的字串,數字會乘以 100
精度說明符:小數的位數
Console.WriteLine("{0:P2}", 0.123456789); 12.35%
R 或 r 往返程序
保證輸出字串后如果使用 Parse 方法將字串轉化成數字,那么該值和原始值一樣,
精度說明符:忽略
Console.WriteLine("{0:R}", 123.123456789); 123.123456789
X 或 x 十六進制,區分大小寫
十六進制數字 A ~ F 會匹配說明符的大小寫形式
精度說明符:輸出字串中的最少位數,如果實際數的位數更少,則在左邊以 0 填充
Console.WriteLine("{0:X}", 250);
Console.WriteLine("{0:X4}", 250);
FA
00FA

$ 字串插值

從 C# 6.0 開始引入的字串插值功能,下面的代碼在 Console.WriteLine() 呼叫中為字串字面量附加的 $ 前綴,它表明使用了字串插值,

static void Main(string[] args)
{
    // 定義變數
    string firstStr, secondStr;

    // 輸出內容到控制臺
    Console.WriteLine("請輸入第一個字串:");

    // 接收用戶輸入,為變數賦值
    firstStr = Console.ReadLine();

    // 輸出內容到控制臺
    Console.WriteLine("請輸入第二個字串:");

    // 接收用戶輸入,為變數賦值
    secondStr = Console.ReadLine();

    // 輸出內容到控制臺
    Console.WriteLine($"你輸入的第一個字串是:{firstStr};第二個字串是:{secondStr}");
}

若要將字串標識為內插字串,可在該字串前面加上 $ 符號, 字串文本開頭的 $" 之間不能有任何空格,

左大括號和右大括號({})指示內插運算式,可將任何回傳值的 C# 運算式置于大括號內(包括 null),

與使用字串復合格式設定功能創建格式化字串相比,字串內插提供的語法更具可讀性,且更加方便, 下面的示例使用了這兩種功能生成同樣的輸出結果:

static void Main(string[] args)
{
    string name = "Mark";
    var date = DateTime.Now;

    // 復合格式化
    Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);

    // 字串插值
    Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
}

輸出

Hello, Mark! Today is Sunday, it's 12:34 now.
Hello, Mark! Today is Sunday, it's 12:34 now.

當運算式結果的型別不是字串時,會按照以下方式將其決議為字串:

  • 如果內插運算式的計算結果為 null,則會使用一個空字串(""String.Empty),
  • 如果內插運算式的計算結果不是 null,通常會呼叫結果運算式的 ToString 方法,

總結

本篇文章介紹了用于從控制臺獲取輸入的 Console.ReadLine() 方法,以及將輸出寫入控制臺的 Console.Write() 方法和 Console.WriteLine() 方法,它們的區別是 Console.WriteLine() 會在每個輸出字串的結尾添加一個換行符,

另外,還介紹了字串復合格式化的設定和用法,用于將數字輸出到不同的格式,從 C# 6 開始可以使用字串插值功能,與使用字串復合格式設定功能創建格式化字串相比,字串內插提供的語法更具可讀性,且更加方便,

原文鏈接:https://www.vinanysoft.com/c-sharp-basics/introducing/console-input-and-output/

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/94881.html

標籤:C#

上一篇:在 C# 中使用變數

下一篇:C#中的委托和事件(一)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more