簡體   English   中英

啟動,停止線程

[英]Starting, Stopping A Thread

我不確定線程​​如何工作。

這是我的代碼。 單擊發送按鈕后:

protected void BtnSend_Click(object sender, EventArgs e)
{
    Thread threadA = new Thread(SendSMS);
    threadA.Start();
}

protected void SendSMS()
{
    //some validations here
    Thread threadB = new Thread(loadingScreen);
    threadB.Start();
    threadB.Join();
    //code that actually sends the required Mail
    threadB.Stop();
    loading.Visible = false;
}

threadB正在調用此方法,該方法基本上是一個div(稱為loading),具有一個div加載,使用戶無法按屏幕上的任何鍵:

protected void loadingScreen()
{
    loading.Visible = true;
}

現在正在發送郵件,但加載屏幕(div)變得不可見。 我究竟做錯了什么?

在編寫ASP.NET與富客戶端應用程序時,必須重新考慮。 簡而言之(實際上確實很短),Web瀏覽器(客戶端)將請求發送到服務器。 服務器處理該請求(該部分是您后面的代碼),然后將結果返回到Web瀏覽器。

當您在背后的代碼中顯示DIV時,請做一些工作,然后再次將其隱藏,只有結果會到達Web瀏覽器。

有多種方法可以實現所需的光學效果,但是您必須首先了解ASP.NET的生命周期。 例如,從這里開始。

我認為您在計算巨大任務時需要一個可響應的應用程序。 在WinForms中,您必須要小心,因為如果要更改某些UI(如Label中的Text),則必須同步兩個線程。 (UI線程和Thread1)如果運行的是.NET 4.0,則應使用“任務類”,因為那里不需要同步,也可以使用匿名方法。

protected void SendSMS()
{
    loading.Visible = true;

    var task = Task.Factory.StartNew(()=>{//code that actually sends the required Mail}

    task.Wait();
    loading.Visible = false;
}

實際上,加載變得可見,然后迅速隱藏。 Join啟用了Div后立即返回,然后發送電子郵件,再次禁用Div。 發送電子郵件和禁用發生在同一線程中。

為什么使用threadB? 您只能使用threadA進行操作:

protected void SendSMS()

{

//這里有一些驗證

loading.Visible = false;

//code that actually sends the required Mail

loading.Visible = false;

}

跨線程操作異常警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM