ASP-NET-C-Tutorial

C# 進位制及轉換說明

C# 進位制及轉換說明

二進位

二進位 (binary, bin) 主要由 0, 1 構成

十進位

十進位 (Octal, oct) 即 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

十六進位

十六進位 (Hexadecimal, hex) 即 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

其中 AF 即 1015

範例

C# 二進位轉十進位

Console.WriteLine(Convert.ToInt32("1111", 2).ToString("D"));//Binary To Decimal

> Output: 15

C# 二進位轉十六進位

Console.WriteLine(Convert.ToInt32("1111", 2).ToString("X"));//Binary To Hexadecimal

> Output: F

C# 十進位轉二進位

Console.WriteLine(Convert.ToString(15, 2));//Decimal To Binary

C# 十進位轉十六進位

Continue Reading

C# - AutoResetEvent 與 ManualResetEvent 控制執行緒暫停及恢復運作

C# - AutoResetEvent 與 ManualResetEvent 控制執行緒暫停及恢復運作

C# 有兩個類別可以用來調控執行緒

  • AutoResetEvent
  • ManualResetEvent

WaitOne 暫停執行緒

AutoResetEvent.WaitOne 方法可以讓執行緒進入 Join (WaitSleepJoin) 暫停狀態

Set 繼續執行緒動作

AutoResetEvent.Set 方法可以讓暫停狀態的執行緒恢復運作 ManualResetEvent 則需要呼叫 .Set 與 .Reset

這裡舉例,在 A B 兩個任務類別中

在 任務A 執行了 WaitOne() 先讓 任務A 進入 WaitSleepJoin Block 狀態

當 任務B 執行到偶數時,就執行 Set() 將 A任務 恢復運作

class Program
{
    private Thread MissionA_Thread;
    private Thread MissionB_Thread;
    private static AutoResetEvent _AutoResetEvent = new AutoResetEvent(false);
    static void Main(string[] args)
    {
        Program mProgram = new Program();
        mProgram.ProvideMission();
        Console.ReadKey();
    }
    private void ProvideMission()
    {

        //指定委派A物件
        ThreadStart MissionA_Tg = new ThreadStart(MissionA);
        //建立A任務執行緒
        MissionA_Thread = new Thread(MissionA_Tg);
        //指定委派B物件
        ThreadStart MissionB_Tg = new ThreadStart(MissionB);
        //建立B任務執行緒
        MissionB_Thread = new Thread(MissionB_Tg);

        //啟動執行緒
        MissionA_Thread.Start();
        MissionB_Thread.Start();
    }
    //任務A
    private void MissionA()
    {
        for (int i = 0; i < 10; i++)
        {
            _AutoResetEvent.WaitOne();
            Console.WriteLine("A" + i);
            Thread.Sleep(1000);
        }
    }
    //任務B
    private void MissionB()
    {
        for (int i = 0; i < 10; i++)
        {
            if (i % 2 == 0)
            {
                _AutoResetEvent.Set();
            }
            Console.WriteLine("B" + i);
            Thread.Sleep(2000);
        }
    }
}

若是 ManualResetEvent 則需要再多加一次 Reset()

Continue Reading

C# 網路連線檢查

C# 網路連線檢查

C# 可以實作 ping 網路連線檢查

實作方式如下:

class Program
{
    static void Main(string[] args)
    {
        //INIT PING OBJECT
        System.Net.NetworkInformation.Ping objPing = new System.Net.NetworkInformation.Ping();

        //設定測試連線及逾時時間
        System.Net.NetworkInformation.PingReply PingResult = objPing.Send("www.google.com.tw", 5000);

        //取得結果
        string pingMsg = (PingResult.Status == System.Net.NetworkInformation.IPStatus.Success) ? "連線成功" : "無法連線";

        Console.WriteLine(pingMsg);

        Console.ReadKey();
    }
}

Continue Reading

C# Thread 執行緒

C# Thread 執行緒

程式都會有一個主處理序

例如,在同一個主處理序,可能同時會需要送出多筆訂單、讀取大型檔案等項目要排隊

在這主要的處理序,可以額外建立新的執行緒,可以將指定的任務交給新的執行緒獨立處理

通常,需要長時運算、 等待回應的流程,就會透過建立新的執行緒來獨立運算,避免影響到其他流程

Continue Reading

ASP.NET C# - 產生 GUID

C# 產生 GUID

C# 如何產生 GUID?

可以直接透過內建方法,產生 GUID:

Guid guid = Guid.NewGuid();
MessageBox.Show("GUID1:"+guid);

guid = Guid.NewGuid();
MessageBox.Show("GUID2:"+guid);

guid = Guid.NewGuid();
MessageBox.Show("GUID3:"+guid);

Continue Reading

Winforms C# - 透過 panel 清除表單內容

Winforms C# - 透過 panel 清除表單內容

Panel 通常會使用 Control 來控制內部元件,例如:

MainPanel.Controls.Find("TGNAME", true)[0].Text

這裡說明如何透過 panel 來清除表單群組,

製作一個清除欄位內容(TextBox, CheckBox, RichTextBox, ComboBox, MaskedTextBox) 的方法

Continue Reading

Winforms C# - 如何在同一元件執行多個事件

在設計表單時,針對單一元件執行單一事件,可以直接在事件下拉選單直接選取

如果要在同一元件(textbox, combobox, numericupdown…)執行多個事件,做法:

開啟表單 .cs 檔案,可以設定多個事件

Continue Reading

Winforms C# - DataGridView 新增 checkbox 及設定全選、全部取消功能

C# DataGridView 新增 checkbox 及設定全選、全部取消功能

新增欄位時,先在第0欄建立一個空欄位,接下來移除再插入checkbox

Continue Reading

WinForms C# ComboBox 設定值的幾種方式

WinForms C# ComboBox 設定值的幾種方式

範例說明下列情況:

如何在 combobox 賦予 items 預設值, 如何從DB取值再加入combobox items 如何設定 combobox key value 值

Continue Reading

Winforms C# - Connect To Database Example

Winform Connect MSSQL

Setup Connection Info

Setup connection information in App.config like this:

Continue Reading

Winforms C# - Login and Logout Example Tutorial

Winform Login Example Tutorial

winforms login page

LoginPage.cs

Continue Reading

.NET WinForms C# 視窗 - MetroFramework UI 框架

MetroFramework 是一個 .NET WinForms 視窗開發UI模組

這裡簡單紀錄安裝及基本使用方式

https://thielj.github.io/MetroFramework/

安裝

透過 NuGet 套件管理來安裝 首先,在專案按右鍵> 管理 NuGet 套件 在瀏覽,搜尋 MetroFramework

下載 MetroModernUI 依 Dennis Magno

Continue Reading

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 與Response.Flush() 表現差異比較

ASP.NET C# 不同瀏覽器在 buffer 緩衝區 與Response.Flush() 表現差異比較

ASP 輸出內容到網頁的方式基本上有兩種

  1. 直接輸出
  2. 緩衝區輸出

直接輸出的方式,每次連線 server 都要執行程式

buffer 緩衝區輸出方式,則首次連線會需要執行程式,程式會將結果放一份在緩衝區,後續連線則是直接從緩衝區讀取數據

緩衝區+大量資料

在 ASP 載入頁面時,若遇到需載入大量內容的情況,若使用到緩衝區

server 端開始載入大量資料時,會需要一段時間將資料一筆一筆放入緩衝區,直到所有數據完成之後,才會在前端頁面產出

此時會耗費較久時間,才會將資料呈現在畫面上

緩衝區資料輸出的時間點

輸出緩衝區資料的方式有兩種: Response.End 或者 Response.Flush

Response.Clear 則是可以清除緩衝區的資料(清除後就無法再送到前端)

Response.Clear 通常都會搭配 Flush 一起使用

使用Flush 預先支出緩衝區內容

這時就可以運用 Response.Flush() 解決等待時間過久的問題

在使用 Response.Flush() 時,要先將 Response.BufferOutput 設定為 true,避免再運行過程中會出現問題

Response.Flush() 可以在資料存取到緩衝區的同時間,立即輸出緩衝區的資料,這時server會持續與頁面保持請求連線,當Flush 拋出資料時,就立即反映在頁面

蒐集瀏覽器資料的處理方式,在不同瀏覽器會有不同處理方式

Chrome, Firefox, Edge 在接收到資料後,就會立即進行渲染,當資料是屬於續傳類型,就會在畫面看到一筆一筆資料逐步出現 須特別留意的是,Firefox, Edge 必須要等到資料為256字元才會真正進行flush輸出緩衝資料 Chrome 則可以做到即時

IE11 則是會等待所有資料都蒐集完畢後,才會一次處理

清除緩衝區資料

透過 Response.Clear() 可以刪除緩衝區所有的內容,使用前同樣要先將 Response.BufferOutput 設定為 true,避免再運行過程中會出現問題

測試

關閉 buffer,直接輸出網頁端,資料畫一筆一筆出現

Continue Reading

用批次檔清除 Windows 暫存檔

在 windows 環境,可以透過批次檔方式一鑑清除暫存檔案,釋放空間

將下列內容儲存為 cleanner.bat

Continue Reading

ASP.NET C# - URL 網址參數解析,取得網址參數

ASP.NET C# URL 網址參數解析,取得網址參數

ASP.NET 提供許多 Request 屬性,可以對URL進行分析,取得網址參數

例如,這裡示範網址為:

https://my.url.com:8080/Detail/Page/List.aspx/showmore?mid=20#main

底下分別列出解屬性及解析結果:

參數 結果
Request.ApplicationPath /
Request.Url.Host my.url.com
Request.Url.Port 8080
Request.Url.Scheme https
Request.Url.Authority my.url.com:8080
Request.Path /Detail/Page/List.aspx/showmore
Request.Url.LocalPath /Detail/Page/List.aspx/showmore
Request.PathInfo /showmore
Request.Url.Query ?mid=20
Request.CurrentExecutionFilePath /Detail/Page/List.aspx
Request.FilePath /Detail/Page/List.aspx
Request.RawUrl /Detail/Page/List.aspx/showmore?mid=20
Request.Url.PathAndQuery /Detail/Page/List.aspx/showmore?mid=20
Request.Url.AbsoluteUri https://my.url.com:8080/Detail/Page/List.aspx/showmore?mid=20
Request.Url.AbsolutePath /Detail/Page/List.aspx/showmore

取得系統路徑

參數 結果
Request.PhysicalPath C:\wwwroot\Detail\Page\List.aspx
System.IO.Path.GetDirectoryName(Request.PhysicalPath) C:\wwwroot\Detail\Page
Request.PhysicalApplicationPath C:\wwwroot\
System.IO.Path.GetFileName(Request.PhysicalPath) List.aspx

解析參數

參數 結果
Request.Url.Segments /, Detail/, Page/, List.aspx/, showmore

Continue Reading

ASP.NET HTML (UrlEncode, UrlDecode, HtmlEncode, HtmlDecode)相關編碼方法

ASP.NET HTML相關編碼方法

ASP.NET 針對HTML相關的編碼,可以分成網址編碼、網頁內容編碼兩部分

這裡分別記錄這些常見的編碼方式,提供參考

Continue Reading

如何解決 IIS 空白畫面或執行ASP.NET 時出現【處理常式 "PageHandlerFactory-Integrated" 的模組清單中有錯誤的模組 "ManagedPipelineHandler"】

通常在新的環境,發布ASP.NET網頁到 wwwroot 之後

最常見的異常狀況有兩種:

  1. IIS 空白畫面
  2. 處理常式 “PageHandlerFactory-Integrated” 的模組清單中有錯誤的模組 “ManagedPipelineHandler”

這裡針對這兩種方式來進行說明,如何解決

[IIS空白]

IIS 空白通常是靜態網頁選項未設定

因此,先開啟控制台 > 程式集 點選 解除安裝程式

IIS 空白畫面

接著點選 開啟或關閉windows功能

IIS 空白畫面

在功能選項中,將 Internet Information Services > World Wide Web 服務 > 靜態內容 勾選

IIS 空白

接著再開啟畫面,看看是否還是空白

IIS 空白 - 在勾選靜態內容後,畫面仍是空白該如何處理

首先,在wwwroot目錄新增一個 index.html ,我們放入簡單的顯示文字

index.html

<!DOCTYPE html>
<html>
<head>
	<title>Hello world</title>
</head>
<body>
Hello world
</body>
</html>

若有在畫面中看到 Hello World,就表示靜態內容已經能正常運作瞜

可以刪除 index.html ,重新發布看看是否已經正常

若 ASP.NET 發布仍出現白畫面問題,則試試接下來得解決方式

Continue Reading

ASP.NET C# - MS SQL Server 連線

ASP.NET C# - MS SQL Server 連線

ASP.NET 連接 MS SQL Server 方式

首先,載入 System.Data.SqlClient 空間命名,取得與 MS SQL Server 連線查詢處理相關功能

Continue Reading

ASP.NET C# - Server Controls

ASP.NET C# - Server Controls

Microsoft 採取跟 Windows Form 應用程式一樣的方式來建立網站應用程式,

動態處理部分會放在 .aspx,事件處理程式則會將程式碼後置(code-behind) 放在 .cs或.vb

所以都必須先建立一個 form 表單範圍,並且添加 runat=“server”

在 form 內部,就能開始添加控制項,或者事件驅動,

因此,想在HTML元素進行 server side處理,就要向這些元素添加 runat=“server” 屬性,

以及註冊 ID 作為辨識,ID在同一個webForm中不可以重複

例如,在 server side 賦予超連結的url值

在 C# 檔案 C#

mylink.HRef = "http://google.com";

在HTML 表單中,超連結標籤新增了HtmlAnchor 服務器控制向之後,

server side就會透過id來辨識,操控賦予值

aspx

<form id="form1" runat="server">
	<a id="mylink" runat="server">my link</a>
</form>

標準控制項

前面提到,在 Web 設計會透過一個 form 的區塊來處理動態資料

微軟提供相當多的標準控制項,可以直接應來建立各種網頁功能,例如: Label, TextBox, Button, LinkButton, ImageButton, HyperLink, DropDownList, ListBox, CheckBox, CheckBoxList, RadioButton, RadioButtonList, Image, ImageMap, Table, BulletedList, HiddenField, Literal, Calendar, AdRotator, FileUpload, Wizard, Xml, MultiView, Panel, PlaceHolder, View, Substitution, Localize

Continue Reading

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在

ASP.NET C# 判斷 HTTP REQUEST 請求來源 KEY 是否存在

HTTP 請求來源可以為 POST 或 GET 類型,並且夾帶 key 與 value

常用到會先檢查是否存在 key

若不存在則返回錯誤,或者對應處理,例如表單欄位未填

若存在key才進行正常程序,例如儲存表單

有幾種方式可以用來檢查

這裡以取得GET的參數來說明如何檢查 Key 是否存在

Continue Reading