標簽在以下代碼中不可見。當用戶單擊登錄時,我需要顯示一條訊息,請稍候。它在之前顯示,但在添加時間間隔之后它不顯示
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Label3.Visible = True
If TextBox1.Text = "Akilan" And TextBox2.Text = "123" Then
System.Threading.Thread.Sleep(5000)
Form2.Show()
Hide()
Else
MsgBox("Sorry, The Username or Password was incorrect.", MsgBoxStyle.Critical, "Information")
End If
End Sub
uj5u.com熱心網友回復:
UI 執行緒上的 Thread.Sleep 將導致您的表單“凍結”。聽起來您在后臺代碼運行時需要某種等待指示器。
你應該做的是異步執行你長時間運行的代碼,顯示你的標簽,等待異步代碼完成,然后做一些事情(例如隱藏標簽)。
使用您的代碼,它看起來像這樣:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Label3.Show()
If (TextBox1.Text = "Akilan" AndAlso TextBox2.Text = "123") Then
Dim t = Task.Run(Sub() Threading.Thread.Sleep(5000))
t.Wait()
Label3.Hide()
Else
MessageBox.Show("Sorry, the username or password was incorrect", "Invalid Credentials", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
uj5u.com熱心網友回復:
這樣做的方法是隱藏/顯示標簽文本客戶端。然后當頁面到達服務器并且你的代碼運行時,客戶端仍然會顯示該訊息。完成后面的代碼后,整個頁面現在會回傳到客戶端,即重新加載 重新顯示。
掌握上述所謂的“往返”在這里非常重要。
由于您背后的代碼從不與用戶互動,而只有剛剛到達服務器的網頁副本,并且背后的代碼可以玩,更改和修改該頁面 - 但客戶端只能在之后看到此類更新頁面一直回傳到客戶端。這就是為什么這段代碼不能作業:
Label3.Visible = True
If TextBox1.Text = "Akilan" And TextBox2.Text = "123" Then
System.Threading.Thread.Sleep(5000)
Form2.Show()
Hide()
上面的代碼會設定Label.visible = true,但是整個頁面還沒有做完它的代碼,整個頁面還在服務端。只有在完成所有代碼之后,頁面才會回傳客戶端并顯示標簽 - 但所有代碼必須在頁面回傳客戶端之前完成。
但是,這段代碼可以正常作業:

那么讓我們看一下上面的內容:
首先,我們不使用 visible=false 作為標簽。原因是如果你這樣做,那么標簽就不會在標記中呈現。
接下來,我們為按鈕添加了一個 onclient 點擊事件。
我們的按鈕代碼包含以下代碼:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Thread.Sleep(3000)
End Sub
所以,當你運行它時,你會看到 3 秒鐘:

那么會發生什么?
好吧,您單擊按鈕 - OnClient 代碼(javascrt 客戶端)將運行,然后將頁面回發到服務器。
因此,既然該標簽現在是“顯示”,那么它將顯示。現在網頁已在服務器上啟動 - 您的代碼在運行。后面的代碼什么時候完成?
整個頁面現在回傳瀏覽器客戶端。這也意味著我們的標簽訊息將再次自動隱藏 - 因為該頁面是用服務器剛剛發送回客戶端的全新頁面重新繪制的。
請注意,在上面,我假設安裝了 jQuery。如果不是,那么您的腳本必須是這樣的:
function ShowLabel()
{
lbl = document.getElementById("lblMessage")
lbl.style.display = "inline"
}
還要注意關閉我如何設定 lable = static 的 id 模式 - 我經常這樣做,因為那時在 js 中參考控制元件變得容易得多。
那么,這里的真正訣竅是什么?
我們顯示標簽客戶端,然后服務器花費的時間和時間就是標簽顯示的時間量。當整個新網頁從服務器回傳時,標簽將恢復為隱藏狀態(顯示:無)。
所以,請記住這個非常重要的往返概念。當您的代碼運行落后并更改頁面上的值或控制元件時?最終用戶在完成所有后面的代碼之前不會看到此類更改,然后頁面將回傳給用戶。實際上,隱藏或顯示的代碼可以在代碼延遲之前或之后變為 - 它不會更新客戶端,實際上更改標簽和延遲的順序無關緊要(因為網頁仍然存在在服務器上)。因此,您對頁面所做的所有更改都會保留在服務器上,直到所有代碼完成,然后整個頁面回傳客戶端以顯示此類更改。
另一種方法是考慮 ajax 呼叫 - 但是這里先一步一步,對吧?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411176.html
標籤:
