在 web 應用程式 asp.net 中的按鈕單擊中,我創建了一個執行緒。在執行緒內部,我試圖禁用該按鈕并執行一些后臺作業。后臺作業完美運行,但按鈕禁用不起作用。我的代碼是:
private void generteBtn_Click(object sender, EventArgs e)
{
new Thread (() =>
{
btn.enabled = false;
// thread work start here;
//emailing
}.start();
}
我的問題是如何在執行緒作業時禁用按鈕并在執行緒完成后重新啟用generteBtn_Click。
uj5u.com熱心網友回復:
因為您在此處創建的執行緒不是 UI 執行緒,要訪問 UI 執行緒中的任何元素,您可以使用:
Application.Current.Dispatcher.Invoke(() =>
{
btn.enabled = false;
});
有關更多詳細資訊,您可以查看以下鏈接:
1-如何獲取 UI 執行緒的 Dispatcher?
2- UI 執行緒上的 Dispatcher.Dispatch
uj5u.com熱心網友回復:
在開始下一個行程/執行緒之前隱藏/顯示按鈕。
例如:
btn.enabled = false;
new Thread (() =>
{
// thread work start here;
//emailing
}.start();
這樣,按鈕被禁用,行程開始,然后像往常一樣,一個全新的網頁副本被發送回客戶端。
如果您需要更新該頁面?那么您實際上只有 2 個實際選擇。
您可以在頁面上啟動計時器 - 呼叫 ajax 例程,它必須檢查行程設定的某些 session() 值 =“done”。
另一種方法是將 signalR 引入您的應用程式。
https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr#:~:text=What is SignalR? ASP.NET SignalR is a library,process of adding real-time web functionality to applications。
我有許多處理程式。我開始這個程序,然后我在頁面上啟動一個計時器。它每 1 秒重新重繪 一次更新面板,直到 session("MyProcessDone") = true,然后我在那時停止計時器(當然還更新微調器/影片 gif)。因此,您可以在網頁上啟動計時器 - 并檢查一些 session() 值,或者如上所述,將 signalR 引入您的應用程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395822.html
上一篇:在ASP.NET中發布網站時出現System.AggregateException錯誤
下一篇:嵌套模塊中的角度訪問父引數
