看板 C_Sharp 關於我們 聯絡資訊
如果我從DB中撈資料 撈完資料後要立即更新Lable值 之後每30秒會撈一次資料 我想要在撈完資料後立即更新Label值 我嘗試用Timer 但他只能控制時間 可是我希望是在我做完這個動作後的下一行更新Label值 而不是每30秒更新值 我也試過委派了 可是都不行 請問還有甚麼辦法嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.6.129
a926:?? Timer每30秒觸發事件後->DB撈資料->更新Label值 02/10 11:06
a926:是你的流程有問題嗎? 02/10 11:06
我是在前端寫個timer 設定每1秒撈資料 但他第一次撈資料 他會亂跳 第一次通常會在等100秒或20或30更新一次Label 之後就會固定每一秒撈資料 可是第一次撈資料的時間會不固定 之後就會很正常 不知道為什麼會這樣 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 11:18)
KanoLoa:更新label.text 之後,多一行label.update看看 02/10 13:23
KanoLoa:你第一次撈資料的時候有確定連接到資料庫了嗎 02/10 13:24
Litfal:是DB端有問題還是UI端有問題?所以說要把物件職責拆開阿... 02/10 13:25
Litfal:至少把DbContext和UI分開,改用事件通知來寫。 02/10 13:27
我貼一下部分的程式碼 我確定值有存到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)
johnpage:timer使用有問題 02/10 15:07
請問哪邊出了問題 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 18:54)
Litfal:A到底是string還是Control...怎麼會有A.Text 02/10 19:04
Litfal:而且你這Timer也沒有重新撈資料阿 02/10 19:05
A是string 抱歉我打錯 Timer我設定每5秒會重新更新 A的值會隨著每次while做完就會更新 A我宣告在global 所以我這樣寫會產生問題嗎 還麻煩幫忙指證 謝謝! ※ 編輯: Anthony53 來自: 140.109.6.129 (02/10 19:15)
KanoLoa:會,撈資料太慢配上你的timer邏輯可能會卡到沒更新畫面 02/11 00:25
KanoLoa:先試試看把label那行丟在button2事件最後一行測試正確 02/11 00:26
KanoLoa:不過這種寫法不好,別在UI事件中放可能會讀取很久的邏輯 02/11 00:26
我有測試過 值是正確的 可是沒辦法動態更新畫面 值只會在server端 可以請教一下 如果這樣的處理 該用甚麼方式比較好呢 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 09:17) ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 09:22)
KanoLoa:額外開一個新的執行序去撈資料 02/11 10:14
KanoLoa:UI更新畫面會等你事件全處理好才一次更新,自然會跳過 02/11 10:16
我把我的問題簡化 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)
m339606:AJAX + AJAX Timer 02/11 12:27
KanoLoa:因為整個事件要等你迴圈跑完才更新畫面阿,當然會延遲。 02/11 13:01
KanoLoa:創一個執行緒去額外跑回圈,會稍微好一點 02/11 13:02
那如果我這種做法 要怎麼寫會比較適合 謝謝 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/11 13:59) 我這限制要用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)
KanoLoa:鬼打牆了,請開另一個執行續跑回圈,迴圈速度慢點即可。 02/11 18:03
KanoLoa:你知道更新畫面的函示是哪個嗎? 02/11 18:04
Litfal:你都用Timer了何必用迴圈哩...? 02/11 18:33
KanoLoa:乾脆全貼吧 02/11 18:57
largesperm:用 backgroundworker 02/11 20:28
我用的是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)
KanoLoa:捨棄你的迴圈吧,另開一個timer慢慢+++++會比較容易理解 02/11 23:20
恩 可以請教一下 如果我再開另一個timer 我該怎麼控制從excel取值得timer做完取值的動作後 在呼叫另一個timer去client印出值 然後再跳回去取值呢 這是我一直卡住的地方 謝謝 ※ 編輯: Anthony53 來自: 61.228.161.249 (02/11 23:31)
Litfal:回去重讀Timer!上面就想推薦用System.Threading底下的Timer 02/12 00:32
Litfal:但想到要解釋我就軟了... 我早上有用 可是沒有產生效果 http://ppt.cc/lcg1 我參考msdn
KanoLoa:用一個timer一直檢查數值是否有變動來決定要不要更新 02/12 01:01
我早上試過 就是timer一開始都搶不到cpu 雖然我設定了5秒要印出值 可是它會搶不到cpu所以就沒辦法印出值 ※ 編輯: Anthony53 來自: 140.109.6.129 (02/12 09:29)
KanoLoa:迴圈要拿掉!然後不要一直撈資料,不然都卡在那邊 02/12 09:32