C#多線程

來源:互聯網
上載者:User

      C#裡面建立多線程,使用“Thread”類。假設Do方法有一個string參數,那麼就要使用“ParameterizedThreadStart”進行執行個體化,詳細如下。
Thread th = new Thread(new ParameterizedThreadStart(Do)); th.IsBackground=true; th.Start(your value here);
     看這句代碼,如果 Do 方法執行完成,該線程就自動銷毀了。如果該線程不是後台線程,應用程式定義域退出時,它也會自動結束。當然,還有其它的方式用意強制結束線程,但是這些方法
都和你的 Do 方法要執行任務相關,有時候會造成你顯式的調用了 Abort,但是它仍在運行。通常會在Do方法內把任務分解的足夠細,然後通過 ManualResetEvent 來控制線程的退出。
      要在應用程式退出時銷毀可以,這要看你是什麼應用程式,如果是WinForm,你只要執行下面語句:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
if(this.thread != null)
{
this.thread.Suspend();
this.thread.Abort();
}
}
catch
{
MessageBox.Show("異常終止線程");
}
}
其實,只要線程的宿主進程銷毀了,線程就會自動銷毀。

可以把多個線程放入一個Dictionary中,Dictionary<string,Thread>,其中string為“標識”(可以通過Name擷取)。

可以通過Start,Suspend或者Reset方法控制啟停(注意,這些方法對於同步而言是過時的,但單純對於控制線程”停止“和”啟動“是可以的)。

namespace Processing
{
public class ETLProcess
{
public Dictionary<string,Thread> threadlists;//線程列表
public ETLProcess()
{
threadlists = new Dictionary<string, Thread>();
}

public bool CreateThead(string ETLTableName)
{
bool flag=false;
//TableName = ETLTableName;
try
{
Thread th = new Thread(new ParameterizedThreadStart(Do));
th.IsBackground = true;
th.Name = ETLTableName;
th.Start(ETLTableName);

threadlists.Add(ETLTableName, th);

flag = true;
}
catch (Exception ex)
{
flag = false;
}

return flag;
}

public void Do(object TableName)
{
while (true)
{
Processing(TableName.ToString());

//Thread.Sleep(60000);//線程一分鐘跑一次

Thread.Sleep(10000);
}

}

 

public bool SuspendThread(string threadname)
{
bool flag = false;
try
{
threadlists[threadname].Suspend();

flag = true;
}
catch (Exception ex)
{
flag = false;
}

return flag;
}

public bool SuspendAbort(string threadname)
{
bool flag = false;
try
{
threadlists[threadname].Abort();
flag = true;
}
catch (Exception ex)
{
flag = false;
}

return flag;
}
}
}

最後,要注意線程最外圍要用“While”保證線程的持續運行。如果是多線程訪問資料庫,注意線程間“資料庫連接資源Conn”對象的競爭。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.