作者Anthony53 (安东尼)
看板C_Sharp
标题[问题] 动态更新Label值
时间Mon Feb 10 10:59:15 2014
如果我从DB中捞资料
捞完资料後要立即更新Lable值
之後每30秒会捞一次资料
我想要在捞完资料後立即更新Label值
我尝试用Timer
但他只能控制时间
可是我希望是在我做完这个动作後的下一行更新Label值
而不是每30秒更新值
我也试过委派了
可是都不行 请问还有甚麽办法吗 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.6.129
1F:→ a926:?? Timer每30秒触发事件後->DB捞资料->更新Label值 02/10 11:06
2F:→ a926:是你的流程有问题吗? 02/10 11:06
我是在前端写个timer 设定每1秒捞资料
但他第一次捞资料 他会乱跳
第一次通常会在等100秒或20或30更新一次Label
之後就会固定每一秒捞资料
可是第一次捞资料的时间会不固定 之後就会很正常
不知道为什麽会这样 谢谢
※ 编辑: Anthony53 来自: 140.109.6.129 (02/10 11:18)
3F:→ KanoLoa:更新label.text 之後,多一行label.update看看 02/10 13:23
4F:→ KanoLoa:你第一次捞资料的时候有确定连接到资料库了吗 02/10 13:24
5F:→ Litfal:是DB端有问题还是UI端有问题?所以说要把物件职责拆开阿... 02/10 13:25
6F:→ 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)
7F:推 johnpage:timer使用有问题 02/10 15:07
请问哪边出了问题 谢谢
※ 编辑: Anthony53 来自: 140.109.6.129 (02/10 18:54)
8F:→ Litfal:A到底是string还是Control...怎麽会有A.Text 02/10 19:04
9F:→ Litfal:而且你这Timer也没有重新捞资料阿 02/10 19:05
A是string 抱歉我打错
Timer我设定每5秒会重新更新
A的值会随着每次while做完就会更新
A我宣告在global
所以我这样写会产生问题吗 还麻烦帮忙指证 谢谢!
※ 编辑: Anthony53 来自: 140.109.6.129 (02/10 19:15)
10F:→ KanoLoa:会,捞资料太慢配上你的timer逻辑可能会卡到没更新画面 02/11 00:25
11F:→ KanoLoa:先试试看把label那行丢在button2事件最後一行测试正确 02/11 00:26
12F:→ 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)
13F:→ KanoLoa:额外开一个新的执行序去捞资料 02/11 10:14
14F:→ 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)
15F:→ m339606:AJAX + AJAX Timer 02/11 12:27
16F:→ KanoLoa:因为整个事件要等你回圈跑完才更新画面阿,当然会延迟。 02/11 13:01
17F:→ 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)
19F:→ KanoLoa:鬼打墙了,请开另一个执行续跑回圈,回圈速度慢点即可。 02/11 18:03
20F:→ KanoLoa:你知道更新画面的函示是哪个吗? 02/11 18:04
21F:→ Litfal:你都用Timer了何必用回圈哩...? 02/11 18:33
22F:→ KanoLoa:乾脆全贴吧 02/11 18:57
23F:推 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)
24F:→ KanoLoa:舍弃你的回圈吧,另开一个timer慢慢+++++会比较容易理解 02/11 23:20
恩 可以请教一下
如果我再开另一个timer 我该怎麽控制从excel取值得timer做完取值的动作後
在呼叫另一个timer去client印出值
然後再跳回去取值呢
这是我一直卡住的地方 谢谢
※ 编辑: Anthony53 来自: 61.228.161.249 (02/11 23:31)
25F:→ Litfal:回去重读Timer!上面就想推荐用System.Threading底下的Timer 02/12 00:32
→ Litfal:但想到要解释我就软了...
我早上有用 可是没有产生效果
http://ppt.cc/lcg1 我参考msdn
26F:→ KanoLoa:用一个timer一直检查数值是否有变动来决定要不要更新 02/12 01:01
我早上试过
就是timer一开始都抢不到cpu 虽然我设定了5秒要印出值
可是它会抢不到cpu所以就没办法印出值
※ 编辑: Anthony53 来自: 140.109.6.129 (02/12 09:29)
27F:→ KanoLoa:回圈要拿掉!然後不要一直捞资料,不然都卡在那边 02/12 09:32