[問題] 動態更新Label值

看板C_Sharp (C#)作者 (安東尼)時間11年前 (2014/02/10 10:59), 編輯推噓2(2025)
留言27則, 6人參與, 最新討論串1/3 (看更多)
如果我從DB中撈資料 撈完資料後要立即更新Lable值 之後每30秒會撈一次資料 我想要在撈完資料後立即更新Label值 我嘗試用Timer 但他只能控制時間 可是我希望是在我做完這個動作後的下一行更新Label值 而不是每30秒更新值 我也試過委派了 可是都不行 請問還有甚麼辦法嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.6.129

02/10 11:06, , 1F
?? Timer每30秒觸發事件後->DB撈資料->更新Label值
02/10 11:06, 1F

02/10 11:06, , 2F
是你的流程有問題嗎?
02/10 11:06, 2F
我是在前端寫個timer 設定每1秒撈資料 但他第一次撈資料 他會亂跳 第一次通常會在等100秒或20或30更新一次Label 之後就會固定每一秒撈資料 可是第一次撈資料的時間會不固定 之後就會很正常 不知道為什麼會這樣 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 11:18)

02/10 13:23, , 3F
更新label.text 之後,多一行label.update看看
02/10 13:23, 3F

02/10 13:24, , 4F
你第一次撈資料的時候有確定連接到資料庫了嗎
02/10 13:24, 4F

02/10 13:25, , 5F
是DB端有問題還是UI端有問題?所以說要把物件職責拆開阿...
02/10 13:25, 5F

02/10 13:27, , 6F
至少把DbContext和UI分開,改用事件通知來寫。
02/10 13:27, 6F
我貼一下部分的程式碼 我確定值有存到A裡面 只是他沒有顯示到前端 我希望他可以動態顯示到前端 Button2_Click1(object sender, EventArgs e) { while{ //////撈資料到string A///// A=撈出的資料; } } protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = A; } ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 13:43)

02/10 15:07, , 7F
timer使用有問題
02/10 15:07, 7F
請問哪邊出了問題 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 18:54)

02/10 19:04, , 8F
A到底是string還是Control...怎麼會有A.Text
02/10 19:04, 8F

02/10 19:05, , 9F
而且你這Timer也沒有重新撈資料阿
02/10 19:05, 9F
A是string 抱歉我打錯 Timer我設定每5秒會重新更新 A的值會隨著每次while做完就會更新 A我宣告在global 所以我這樣寫會產生問題嗎 還麻煩幫忙指證 謝謝! ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 19:15)

02/11 00:25, , 10F
會,撈資料太慢配上你的timer邏輯可能會卡到沒更新畫面
02/11 00:25, 10F

02/11 00:26, , 11F
先試試看把label那行丟在button2事件最後一行測試正確
02/11 00:26, 11F

02/11 00:26, , 12F
不過這種寫法不好,別在UI事件中放可能會讀取很久的邏輯
02/11 00:26, 12F
我有測試過 值是正確的 可是沒辦法動態更新畫面 值只會在server端 可以請教一下 如果這樣的處理 該用甚麼方式比較好呢 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 09:17) ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 09:22)

02/11 10:14, , 13F
額外開一個新的執行序去撈資料
02/11 10:14, 13F

02/11 10:16, , 14F
UI更新畫面會等你事件全處理好才一次更新,自然會跳過
02/11 10:16, 14F
我把我的問題簡化 static int i=0; protected void Timer1_Tick(object sender, EventArgs e) { Label1.Text = i; } protected void Button1_Click(object sender, EventArgs e) { while (true) { i++; } } 我希望看到 按下button後 會看到 0123456789.... 可是我這樣寫 會只看到0就停住了 大概過了若干秒 才會出現0123456789... ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 12:21)

02/11 12:27, , 15F
AJAX + AJAX Timer
02/11 12:27, 15F

02/11 13:01, , 16F
因為整個事件要等你迴圈跑完才更新畫面阿,當然會延遲。
02/11 13:01, 16F

02/11 13:02, , 17F
創一個執行緒去額外跑回圈,會稍微好一點
02/11 13:02, 17F
那如果我這種做法 要怎麼寫會比較適合 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 13:59)

02/11 16:53, , 18F
我這限制要用web form才可以 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 17:12) void A(){ 回圈 { 抓資料 呼叫B } } void B(){ 將資料印到client 跳到A迴圈剛剛呼叫B的地方 } 我在簡化成這樣...不知道有沒有比較清楚 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 17:16)

02/11 18:03, , 19F
鬼打牆了,請開另一個執行續跑回圈,迴圈速度慢點即可。
02/11 18:03, 19F

02/11 18:04, , 20F
你知道更新畫面的函示是哪個嗎?
02/11 18:04, 20F

02/11 18:33, , 21F
你都用Timer了何必用迴圈哩...?
02/11 18:33, 21F

02/11 18:57, , 22F
乾脆全貼吧
02/11 18:57, 22F

02/11 20:28, , 23F
用 backgroundworker
02/11 20:28, 23F
我用的是web form Code: static int i=1; static string T=""; protected void Timer1_Tick(object sender, EventArgs e) { ////T為excel取出來的值/// Label1.Text = T; } protected void Button1_Click(object sender, EventArgs e) { while (i<1000) { ////從excel取出T值/// i++; } } 原始碼大概長這樣 每3秒會取出T值 所以我設定Timer每3秒更新一次 但現在我這樣寫 前面2分鐘被while迴圈給block Timer完全執行不了 過約兩分鐘後 就會變成Timer和while兩個輪流用 大概是這樣 謝謝 ※ 編輯: Anthony53 來自: 61.228.161.249 (02/11 21:00) ※ 編輯: Anthony53 來自: 61.228.161.249 (02/11 21:00)

02/11 23:20, , 24F
捨棄你的迴圈吧,另開一個timer慢慢+++++會比較容易理解
02/11 23:20, 24F
恩 可以請教一下 如果我再開另一個timer 我該怎麼控制從excel取值得timer做完取值的動作後 在呼叫另一個timer去client印出值 然後再跳回去取值呢 這是我一直卡住的地方 謝謝 ※ 編輯: Anthony53 來自: 61.228.161.249 (02/11 23:31)

02/12 00:32, , 25F
回去重讀Timer!上面就想推薦用System.Threading底下的Timer
02/12 00:32, 25F
Litfal:但想到要解釋我就軟了... 我早上有用 可是沒有產生效果 http://ppt.cc/lcg1 我參考msdn

02/12 01:01, , 26F
用一個timer一直檢查數值是否有變動來決定要不要更新
02/12 01:01, 26F
我早上試過 就是timer一開始都搶不到cpu 雖然我設定了5秒要印出值 可是它會搶不到cpu所以就沒辦法印出值 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/12 09:29)

02/12 09:32, , 27F
迴圈要拿掉!然後不要一直撈資料,不然都卡在那邊
02/12 09:32, 27F
文章代碼(AID): #1I-425Qr (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1I-425Qr (C_Sharp)