→ 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