2014-05-07 22 views
0

我正在創建一個asp.net應用程序,我試圖使用單獨的線程來允許用戶上傳文件到服務器(似乎有很多衝突當兩個用戶在同一時間這樣做)。當用戶點擊的頁面,我有我的處理邏輯,pageLoad函數中:是否有必要在C#中加入我的線程

public void UploadFile() 
{ 
    //code to upload a file 
} 


protected void Page_Load(object sender, EventArgs e) 
{ 
    Thread t1 = new Thread(UploadFile); 

    t1.Start(); 
    t1.Join();  
} 

我的問題是:是不是真的有必要加入所創建的線程?從其他一些帖子看來,加入一個線程似乎很重要,這樣它就不會意外終止。

如果有幾個人同時運行此代碼,「t1.Join()」會加入他們創建的當前線程嗎?

+2

調用'加入'本質上是等待該線程終止,所以如果你不關心,你不需要調用'加入'就可以了。 –

+0

好的,所以我應該保留它?在我的UploadFile函數完成之前,我的Page_Load函數能夠完成嗎? – roshambo

+0

是的,如果你刪除了'Join',你的'Page_Load'處理程序將終止而不等待線程運行完成,這在這裏沒問題。 –

回答

1

我創建一個asp.net應用程序,我想使用單獨的線程來允許用戶將文件上傳到服務器

它一般是不明智脫掉你自己的線程中ASP.Net。這樣的線程可能會意外終止,例如,如果應用程序域回收。

代碼UploadFile將完全在服務器上運行。目前尚不清楚該代碼的功能,但它無法啓動與用戶瀏覽器的新互動。

查看此Microsoft文檔,其中演示瞭如何編寫代碼以允許將文件上載到服務器。

http://support.microsoft.com/kb/323246

這似乎是很重要的加入一個線程,以便它不會意外

終止如果程序終止後臺線程將終止。一般建議讓線程自行終止,要麼是因爲他們的工作完成了,要麼是因爲某種信號的反應。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Thread t1 = new Thread(UploadFile); 

    t1.Start(); 
    t1.Join();  
} 

此代碼仍將阻止Page_Load事件。即使它啓動了一個新線程,它也會在返回之前等待該線程完成。如果你刪除Join(),處理程序將在啓動線程t1後立即返回。

0

你不需要使用線程來上傳文件,asp.net運行時實際上是一個多線程環境。

相關問題