簡體   English   中英

Web應用程序中的C#線程問題

[英]C# Threading Issue in a web application

我有一個Web應用程序,在頁面后面的代碼中,我有一個按鈕單擊事件。

protected void btnUpload_Click(object sender, EventArgs e)
        {
            TimerEvent TE = new TimerEvent();
            TE.TimerEvents();
            Server.Transfer("~/Jobs.aspx");
        }

我有一個調用TimerEvents()的方法,可能需要10到15秒鍾才能將控件返回到服務器傳輸。 因此,我希望在方法調用的同時同時執行服務器傳輸線。

我在這里嘗試線程化:

    TimerEvent TE = new TimerEvent();
    Thread t = new Thread(TE.TimerEvents);
    t.IsBackground = true;
    t.Start();           
    Server.Transfer("~/Jobs.aspx");

但是,直到方法完成,才進行傳輸。 我該如何實現?

這種設計並不理想。 即使您做對了,由於混合了多線程代碼和Server.Transfer()調用,您仍有可能遇到麻煩。

在ASP.NET應用程序中還存在有關多線程的問題。

我建議您重新設計您的應用程序,以使您擁有某種將長時間運行的任務排隊的隊列。 然后,您可以使用一項服務來逐一處理隊列中的任務。

現在,您可以通過網絡應用程序執行以下操作:

  1. 將長時間運行的TimerEvents任務排隊到外部服務。

  2. 呼叫Server.Transfer()

  3. 在新頁面(“〜/ Jobs.aspx”)上,在需要時調用外部服務以獲取結果。

如果經常以類似的方式重復該過程,那么您將所謂的“應用程序事件”為何不在Global.asax(應用程序)文件中的單個線程上建立一個進程。 您可以使用FileWatcher類監視目錄並按順序處理文件,或者在到達文件時在其自己的線程中為每個文件啟動另一個進程,可以保留狀態和任何結果,並可能使用AJAX定時將其公開給客戶端。打回來。

記住要在從Global.asax文件調用的方法中正確處理所有異常,因為它們可以使整個appDomain崩潰。

Global.asax

最簡單的操作:我將立即返回並說“您的文件已上傳”,然后在“ jobs.aspx”頁面上進行自動刷新,並將每個作業的狀態顯示為“正在處理”,直到完成為止”

假設jobs.aspx是您正在處理的作業的列表...並且“自動刷新”不太麻煩:)

暫無
暫無

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

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