2014年11月8日 星期六

[C#]使用執行緒(Thread)方法

當程式寫到一個程度的時候
就一定會遇到多工的需求
而讓程式同時做很多事情的其中一個方法
就是使用執行緒(Thread)
這篇就來說明一下Thread的基本
首先,要使用Thread必須先在.cs檔加上using
using Threading;

接下來就可以在任何地方宣告Thread並啟動它
Thread sample = new Thread(_ThreadFunction);
sample.Start();
在上面這個範例中的_ThreadFunction是你用Thread方式去執行的Function名稱
內容可能像這樣
private void _ThreadFunction()
{
   int count = 0;

   while(count < 100)
   {
      count++;
      Thread.Sleep(100);
   }
}
這個Function的內容就是很簡單的把count加到100然後結束

如果想要強制結束Thread可以使用Abort方法
sample.Abort();

另外要結束Thread的話建議先判斷一下Thread還有沒有在跑
if(sample.IsAlive)
{
   sample.Abort();
}

整理一下上面的範例後完整的程式碼大概會長這樣
using System;
using System.Windows.Forms;
using System.Threading;
namespace ThreadSample
{
   public partial class Form1 : Form
   {
      Thread sample;

      public Form1()
      {
         InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {
         sample = new Thread(_ThreadFunction);
         sample.Start();
      }

      private void _ThreadFunction()
      {
         int count = 0;
         while(count < 100)
         {
            count++;
            Thread.Sleep(100);
         }
      }

      private void Form1_FormClosing(object sender, FormClosingEventArgs e)
      {
         if(sample.IsAlive)
         {
            sample.Abort();
         }
      }
   }
}
這個完整的程式碼最後的部分是在發生FormClosing事件時(就是視窗關閉時)檢查Thread是否還在執行
如果Thread還在執行則強制關閉視窗
這段程式碼如果沒有寫的話,就會發生你覺得程式已經關閉,但是其實它還是繼續在記憶體裡面跑的問題
所以在用Thread的時候一定要注意Thread的管理
不然可是會造成許多程式異常的情況

2014年11月5日 星期三

數值變數型態整理

不常用到,但有需要時就很有用的資訊

整數

型態範圍位元
帶正負號
sbyte-128 ~ 1278 位元
short-32768 ~ 3276716 位元
int-2,147,483,648 ~ 2,147,483,64732 位元
long-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,80764 位元
不帶正負號
byte0 ~ 2558 位元
ushort0 ~ 6553516 位元
uint0 ~ 4,294,967,29532 位元
ulong0 ~ 18,446,744,073,709,551,61564 位元

浮點數

型態範圍位元
float-3.4 × 1038到 +3.4 × 103832 位元
double±5.0 × 10−324 到 ±1.7 × 1030864 位元 
decimal(-7.9 x 1028 至 7.9 x 1028) / (100 至 28)128 位元