日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

提升.NET控制臺應用體驗的方案解析

454398 ? 來源:博客園 ? 作者:Lamond Lu ? 2020-10-29 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在.NET生態(tài)系統(tǒng)中,控制臺程序的表現(xiàn)相對較差。通常來說,這種項目經(jīng)常作為Demo演示使用?,F(xiàn)在是時候讓控制臺應用程序得到其應有的尊重了。

終端技術的發(fā)展開啟了增強用戶體驗的復興。ITerm2,Hyper,Windows Terminal,所有這些工具都為單調的控制臺體驗增加了一些趣味。 雖然這些工具都允許用戶定制自己體驗,但是對于開發(fā)人員來說,他們還希望向控制臺應用程序中添加一些編程風格。

在本篇博文中,我們將一起看一下如何使用一些出色的開源項目為我們的控制臺程序增添趣味。這里說明的順序并不表明項目的優(yōu)劣,他們都是改善我們控制臺程序體驗的優(yōu)秀方案。

Colorful.Console#

Colorful.Console是一個Nuget包,它可以增強我們對控制臺輸出文字樣式的控制。我們可以使用System.Drawing.Color中定義的顏色來定義控制臺程序的配色方案。

using System;
using System.Drawing;
using Console = Colorful.Console;
...
...
Console.WriteLine("console in pink", Color.Pink);
Console.WriteLine("console in default");

除此之外,Colorful.Console還允許我們使用FIGlet字體編寫帶顏色的ASCII碼輸出

FIGLet:http://www.figlet.org/

FigletFont font = FigletFont.Load("chunky.flf");
Figlet figlet = new Figlet(font);

Console.WriteLine(figlet.ToAscii("Belvedere"), ColorTranslator.FromHtml("#8AFFEF"));
Console.WriteLine(figlet.ToAscii("ice"), ColorTranslator.FromHtml("#FAD6FF"));
Console.WriteLine(figlet.ToAscii("cream."), ColorTranslator.FromHtml("#B8DBFF"));

這個輸出的結果完全就是黑客的夢想。

我建議你訪問一下colorful.console的官方站點,了解這個庫能實現(xiàn)的所有效果,以便更好的改善控制臺程序的體驗。

Colorful.Console:http://colorfulconsole.com/

ConsoleTables#

ConsoleTables包是我(作者)自己編寫的,這里有一點厚顏無恥.。 使用這個庫,可以讓開發(fā)人員很輕松的將一組對象以表格的形式展示在控制臺中。

static void Main(String[] args)
{
    var table = new ConsoleTable("one", "two", "three");
    table.AddRow(1, 2, 3)
         .AddRow("this line should be longer", "yes it is", "oh");

    table.Write();
    Console.WriteLine();

    var rows = Enumerable.Repeat(new Something(), 10);

    ConsoleTable
        .From(rows)
        .Configure(o => o.NumberAlignment = Alignment.Right)
        .Write(Format.Alternative);

    Console.ReadKey();
}

以前,誰不希望能在控制臺中輸出一個表格呢?

FORMAT: Default:

-------------------------------------------------
 | one                        | two       | three |
 --------------------------------------------------
 | 1                          | 2         | 3     |
 --------------------------------------------------
 | this line should be longer | yes it is | oh    |
 --------------------------------------------------

 Count: 2

FORMAT: Alternative:

+----------------------------+-----------+-------+
| one                        | two       | three |
+----------------------------+-----------+-------+
| 1                          | 2         | 3     |
+----------------------------+-----------+-------+
| this line should be longer | yes it is | oh    |
+----------------------------+-----------+-------+

自從ConsoleTables發(fā)布以來,許多開發(fā)人員已經(jīng)研發(fā)出自己的控制臺表格庫了。有一些甚至更好,你可以自行去查找一下。

ShellProgressBar#

和需要其他應用程序一樣,控制臺程序也可以執(zhí)行長時任務。ShellProgressBar是一個非常棒的庫,使用它,你可以在控制臺輸出一些非常驚艷的進度條。而且,ShellProgressBar是可以實現(xiàn)進度條的嵌套使用。例如,如下GIF動畫中展示的效果。

ShellProgressBar使用起來相當?shù)闹苯印?/p>

const int totalTicks = 10;
var options = new ProgressBarOptions
{
    ProgressCharacter = '─',
    ProgressBarOnBottom = true
};
using (var pbar = new ProgressBar(totalTicks, "Initial message", options))
{
    pbar.Tick(); //will advance pbar to 1 out of 10.
    //we can also advance and update the progressbar text
    pbar.Tick("Step 2 of 10"); 
}

謝謝你,Martijin Larrman, 這真的是一個非常好用的庫。

GUI.CS#

GUI.CS是一個非常棒的控制臺UI工具包。它提供了一個功能完善的工具箱,開發(fā)人員可以使用它構建早期控制臺常見的一種用戶界面。

這個UI工具箱提供了如下控件:

  • Buttons
  • Labels
  • Text Entry
  • Text View
  • User Inputs
  • Windows
  • Menus
  • ScrollBars

使用它,開發(fā)人員可以在控制臺應用中實現(xiàn)一些令人難以置信的效果。這個庫是由Miguel De Icaza編寫的,是控制臺技術的巔峰之作,下面讓我們一起來看一個實例程序。

using Terminal.Gui;

class Demo {
    static void Main ()
    {
        Application.Init ();
        var top = Application.Top;

	// 創(chuàng)建頂級窗體
        var win = new Window ("MyApp") {
	    X = 0,
	    Y = 1, // 預留菜單行

	    // 使用Dim.Fill(), 它可以自動調整窗體大小,實現(xiàn)自適應,而無需手動敢于
	    Width = Dim.Fill (),
	    Height = Dim.Fill ()
	};
        top.Add (win);

	// 創(chuàng)建一個菜單
        var menu = new MenuBar (new MenuBarItem [] {
            new MenuBarItem ("_File", new MenuItem [] {
                new MenuItem ("_New", "Creates new file", NewFile),
                new MenuItem ("_Close", "", () => Close ()),
                new MenuItem ("_Quit", "", () => { if (Quit ()) top.Running = false; })
            }),
            new MenuBarItem ("_Edit", new MenuItem [] {
                new MenuItem ("_Copy", "", null),
                new MenuItem ("C_ut", "", null),
                new MenuItem ("_Paste", "", null)
            })
        });
        top.Add (menu);

	var login = new Label ("Login: ") { X = 3, Y = 2 };
	var password = new Label ("Password: ") {
	    	X = Pos.Left (login),
		Y = Pos.Top (login) + 1
        };
	var loginText = new TextField ("") {
                X = Pos.Right (password),
                Y = Pos.Top (login),
                Width = 40
        };
        var passText = new TextField ("") {
                Secret = true,
                X = Pos.Left (loginText),
                Y = Pos.Top (password),
                Width = Dim.Width (loginText)
        };
	
	// 添加一些其他控件
	win.Add (
	    // 這是我最喜歡的布局
  	    login, password, loginText, passText,

	    // 這里使用了絕對定位
            new CheckBox (3, 6, "Remember me"),
            new RadioGroup (3, 8, new [] { "_Personal", "_Company" }),
            new Button (3, 14, "Ok"),
            new Button (10, 14, "Cancel"),
            new Label (3, 18, "Press F9 or ESC plus 9 to activate the menubar"));

        Application.Run ();
    }
}

總結#

作為開發(fā)人員,我們可以沉迷于GUI, 這是理所當然的,它使我們更有生產(chǎn)力。但是控制臺應用程序同樣也很強大。下次當你編寫控制臺程序的時候,你可以考慮使用以上介紹的某些庫,以便為你的控制臺應用增添色彩。
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制臺
    +關注

    關注

    0

    文章

    89

    瀏覽量

    11063
  • 應用程序
    +關注

    關注

    38

    文章

    3346

    瀏覽量

    60428
  • .NET
    +關注

    關注

    0

    文章

    48

    瀏覽量

    24282
  • GUI
    GUI
    +關注

    關注

    3

    文章

    699

    瀏覽量

    43909
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Digi NET+50:高性能網(wǎng)絡芯片的全面解析

    Digi NET+50:高性能網(wǎng)絡芯片的全面解析 在當今的智能網(wǎng)絡設備和互聯(lián)網(wǎng)應用領域,高性能、高度集成的芯片是推動技術發(fā)展的關鍵。Digi NET+50作為一款32位的片上系統(tǒng)ASIC,憑借其卓越
    的頭像 發(fā)表于 03-27 13:05 ?249次閱讀

    深入解析NET+40:嵌入式以太網(wǎng)/互聯(lián)網(wǎng)就緒處理器的卓越之選

    ,我們就從其特性、優(yōu)勢、硬件規(guī)格以及開發(fā)支持等方面進行詳細解析。 文件下載: NET+40-QILRO-4.pdf 一、NET+40的特性 高性能處理器 NET+40采用32位高性能A
    的頭像 發(fā)表于 03-27 13:05 ?181次閱讀

    基于FOC的直播云無刷電機驅動控制方案 !

    脈動、提升控制精度,成為高端直播云無刷電機驅動的優(yōu)選方案。本文基于FOC技術核心,結合直播云的場景特性,設計一套“硬件精簡可靠、算法優(yōu)化
    的頭像 發(fā)表于 03-20 14:37 ?308次閱讀

    華為面向Net5.5G產(chǎn)品方案推動產(chǎn)業(yè)加速邁向智能時代

    5.5G智能化演進方向。華為數(shù)據(jù)通信產(chǎn)品線副總裁趙志鵬發(fā)表主題演講,以領先的面向Net5.5G產(chǎn)品方案推動產(chǎn)業(yè)加速邁向智能時代。
    的頭像 發(fā)表于 03-05 11:31 ?763次閱讀

    modbus控制臺工具

    http://beilatech.com/ 審核編輯 黃宇
    的頭像 發(fā)表于 01-25 22:19 ?141次閱讀
    modbus<b class='flag-5'>控制臺</b>工具

    IDE或控制臺下載調試報錯怎么解決?

    ; IDE或控制臺下載調試時遇到如下報錯解決辦法: unable to open ftdi device with vid 0403, pid 6010, description '
    發(fā)表于 11-06 07:31

    FlashDB移植到rt-thread nano,運行時控制臺無輸出怎么解決?

    rt-thread標準版和HAL裸機版,移植非常成功,換成nano 3.15版,就出現(xiàn)控制臺無輸出,也無法輸入,調試時進入死循環(huán),如圖所示 ,關閉hook也不行,請求指點。謝謝! 上傳測試代碼,用的是nano4.1.1 4.1.1 (test).7z
    發(fā)表于 10-11 09:34

    怎么讀取到msh控制臺輸入的命令?

    如題,怎么讀取到msh控制臺輸入的命令(我的意思是輸入的內容全部重定向獲取出來),請各位大佬賜教 這個代碼會提示Failed to find console device! #include
    發(fā)表于 09-29 08:37

    啟用了控制臺后,空閑線程是不是永遠不會進入?

    控制臺里打印線程(list thread)時,發(fā)現(xiàn)已經(jīng)退出的線程已經(jīng)是CLOSE狀態(tài),但是都是僵尸線程。然后查看shell代碼,看到控制臺一直在跑,所以手動添加了延時(rt_thread_delay)進入,但調試看到空閑線程還是沒能進入。是有什么相關宏定義需要改,還是要
    發(fā)表于 09-19 06:53

    使用最新版本v5.2.0,在Keil-v5.41.0.0的環(huán)境下,atoi轉換異常怎么解決?

    rtthread 版本:v5.2.0 keil 版本:v5.41.0.0 已開啟 rtc 組件,在 FinSH 控制臺輸入: msh &gt;date 2024 11 14 09
    發(fā)表于 09-18 07:46

    剛創(chuàng)建的項目控制臺為什么不能用?

    我用cubmaxIDE配置的板子串口可以輸出,但我用rt去直接創(chuàng)建的項目,就是rt自身剛創(chuàng)建時的那個打印數(shù)據(jù),控制臺都沒反應這個問題處在哪個嗎,按回車鍵也沒有反應,這個那個大神知道為什么嗎?
    發(fā)表于 09-17 07:40

    finsh 控制臺dma發(fā)送如何操作?

    今天因為在高優(yōu)先級線程中頻繁調用rt_kprintf導致低優(yōu)先級運行阻塞,所以突發(fā)奇想想試試控制臺能不能dma發(fā)送,在保證對應uart tx dma的驅動打開后,rt_device_open里
    發(fā)表于 09-11 07:48

    HarmonyOS5云服務技術分享--應用預加載提速指南

    }; ??部署函數(shù)?? 右鍵函數(shù)目錄選擇\"Deploy \'txy-test\'\" 在AGC控制臺綁定預加載函數(shù) ? 方案B:傳統(tǒng)開發(fā)方式 public
    發(fā)表于 05-22 20:39

    用 樹莓派4 打造專屬流媒體控制臺!

    用樹莓派體驗DIY智能科技!如今市面上有各種各樣的流媒體控制臺,但購買現(xiàn)成的哪有自己從零開始制作的有趣呢?至少,這似乎是樹莓派創(chuàng)客社區(qū)的精神所在,就像創(chuàng)客兼開發(fā)者Last-Shake-9874所展示
    的頭像 發(fā)表于 05-11 08:33 ?772次閱讀
    用 樹莓派4 打造專屬流媒體<b class='flag-5'>控制臺</b>!

    UART控制臺通信問題:命令出現(xiàn)拆分或缺失字母,怎么解決?

    我正在使用 Explorer Kit 并使用 John Hyde 書中的示例固件,特別是第 4 章示例 4。我已連接兩根 USB 電纜,并且線程顯示正確。 固件的調試控制臺打印工作正常。 但是,當從
    發(fā)表于 05-09 07:19
    罗江县| 吉隆县| 连山| 汕尾市| 靖安县| 新昌县| 张家界市| 乌鲁木齐县| 平乐县| 高淳县| 米林县| 通化市| 阳山县| 乌拉特前旗| 平乐县| 家居| 新兴县| 龙里县| 原平市| 荔浦县| 新龙县| 塔河县| 南充市| 金沙县| 安龙县| 奉节县| 醴陵市| 新宁县| 衡阳市| 湖州市| 广宗县| 浑源县| 两当县| 龙门县| 修水县| 中超| 临泉县| 仁寿县| 贺兰县| 定襄县| 莲花县|