Timer是不是设置了时间?如果设置了时间的话,比如设置的为5秒,那你点击之后五秒才会触发
解决方案 »
- 关于Dataset空值的判断问题
- 在PC怎麼獲得通過串口服務器後的接受到的串口信息呢?
- listView的选中问题
- datatable合并问题
- 介绍一些关于用C#编写B/S结构方面的书籍
- dataset问题!急!~~~~
- 错误 1 赋值号左边必须是变量、属性或索引器?
- winform中拖出来很多自定义控件TNunber,用来输入数据,类似于textbox 。上下左右相连这摆放,如何能够实现按上下左右箭头,让光标在这些控件里移动
- C#中的backgroundWorker的DoWork出错时,如何让调试器断在出错点?
- 在c#类中的方法前出现的方括号表示什么?
- 在用.net编程里用WebBrowser打开招商银行网站是,安全控件不能安装
- jquery控制母版中行的显示与隐藏
我觉得你没有理解我的意思
所谓前台按钮,后台按钮,是问你这个按钮控件到底是前台控件还是后台控件,而不是这个按钮显示在前台页面还是后台脚本里(后台脚本里放按钮谁看得见啊)
根据你说的,事件是个后台事件,那么我判断你的按钮应该是个后台控件(ASP:BUTTON)
那么你的timer又在哪里,是JS里定义的timer,还是工具箱里拖出来的timer?
既然用了timer,页面上是否用了AJAX?
我觉得你应该用前台控件,写JS脚本来控制timer,既然已经用了AJAX,就不要再使用后台事件了,后台事件必须导致页面回发,跟AJAX冲突
我觉得你没有理解我的意思
所谓前台按钮,后台按钮,是问你这个按钮控件到底是前台控件还是后台控件,而不是这个按钮显示在前台页面还是后台脚本里(后台脚本里放按钮谁看得见啊)
根据你说的,事件是个后台事件,那么我判断你的按钮应该是个后台控件(ASP:BUTTON)
那么你的timer又在哪里,是JS里定义的timer,还是工具箱里拖出来的timer?
既然用了timer,页面上是否用了AJAX?
我觉得你应该用前台控件,写JS脚本来控制timer,既然已经用了AJAX,就不要再使用后台事件了,后台事件必须导致页面回发,跟AJAX冲突
应该问是脚本按钮还是asp.net服务器按钮
//timer定时动作,每间隔xxxx毫秒触发一次
private void timer1_Tick(object sender, EventArgs e)
{
label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离
if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时
{
label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度
}
}
//开始滚动
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //开始滚动
button2.Enabled = true;
}
//单击暂停按钮
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false; //停止滚动
button2.Enabled = false;
}
protected void BtStart_Click(object sender, EventArgs e)
{
Timer2.Enabled = true;
Timer3.Enabled = true;
Thread f = new Thread(MessQueue.Receive);
f.Start();
}
protected void Timer2_Tick(object sender, EventArgs e)
{
Timer2.Enabled = false;
StartLinsterToGetWeightA();
Timer2.Enabled = true;
}protected void Timer3_Tick(object sender, EventArgs e)
{
Timer3.Enabled = false;
StartLinsterToGetWeightB();
Timer3.Enabled = true;
}
}public void StartLinsterToGetWeightA()
{
float weight;
bool flag = true;
ArrayList List = new ArrayList();
//随机产生0-5的数字,当第一个数为0时,不存入list中;不为0,存入list;直到再产生0,把第一个产生的不为零的数作为重量。
while (flag)
{
Random random = new Random();
weight = random.Next(0, 5);
if (weight != 0)
{
List.Add(weight);
}
else
{
int count = List.Count;
if (count != 0)
{
weight += (float)List[0];
dtm = messqueue.AddWeightData(weight, 1, Dbucket_kind.SelectedValue.ToString(), DWareHouse_NO.SelectedValue.ToString(), Dhouse_no.SelectedValue.ToString(), Dbank_no.SelectedValue.ToString(), Dlevel_no.SelectedValue.ToString()).Copy(); 这里先把数据添加到消息队列,然后再返回一个表。 if (dt.Rows.Count == 10) //固定只显示最新的十条记录
{
dt.Rows.RemoveAt(0);
}
dt.Merge(dtm);
GridView1.DataSource = dt;
GridView1.DataBind();
List.Clear();
flag = false;
}
}
}
}public void StartLinsterToGetWeightB()
{
bool flag = true;
ArrayList List = new ArrayList();
while (flag)
{
Random random = new Random();
float weight = random.Next(0, 5);
if (weight != 0)
{
List.Add(weight);
}
else
{
int count = List.Count;
if (count != 0)
{
weight += (float)List[0];
dtm = messqueue.AddWeightData(weight, 2, Dbucket_kind.SelectedValue.ToString(), DWareHouse_NO.SelectedValue.ToString(), Dhouse_no.SelectedValue.ToString(), Dbank_no.SelectedValue.ToString(), Dlevel_no.SelectedValue.ToString()).Copy();
if (dt.Rows.Count == 10)
{
dt.Rows.RemoveAt(0);
}
dt.Merge(dtm);
GridView1.DataSource = dt;
GridView1.DataBind();
List.Clear();
flag = false;
}
}
}
}//滚动停止
protected void BtStop_Click(object sender, EventArgs e)
{
Timer3.Enabled = false;
Timer2.Enabled = false;
//将这次的统计结果显示在页面上
OracleConnection conn = new OracleConnection("Data Source=wms;User ID=wms;Password=wms;");
conn.Open();
DateTime dti = DateTime.Now;
string WorkDay = string.Format("{0:yyyyMMdd}", dti);
string sql1 = "select sum(getmitem_weight) from TResult where work_day=" + WorkDay + "";
string sql2 = "select count(*) from TResult where work_day=" + WorkDay + "";
OracleCommand cmm1 = new OracleCommand(sql1, conn);
OracleCommand cmm2 = new OracleCommand(sql2, conn);
string Stweight = cmm1.ExecuteScalar().ToString();
if (Stweight == "")
{
Stweight = "0";
}
float weight = float.Parse(Stweight);
string Stcount = cmm2.ExecuteScalar().ToString();
if (Stcount == "")
{
Stcount = "0";
}
int count = Convert.ToInt32(Stcount);
Label11.Text = weight.ToString();
Label23.Text = count.ToString();
conn.Close();
conn.Dispose();
}
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。
你在timer里执行了死循环,导致页面假死了
只有死循环退出了,才能响应你的click
没有死循环public void StartLinsterToGetWeightA()
{
float weight;
bool flag = true;
ArrayList List = new ArrayList();
//随机产生0-5的数字,当第一个数为0时,不存入list中;不为0,存入list;直到再产生0,把第一个产生的不为零的数作为重量。
while (flag)
{
Random random = new Random();
weight = random.Next(0, 5);
if (weight != 0)
{
List.Add(weight);
}
else
{
int count = List.Count;
if (count != 0)
{
weight += (float)List[0];
dtm = messqueue.AddWeightData(weight, 1, Dbucket_kind.SelectedValue.ToString(), DWareHouse_NO.SelectedValue.ToString(), Dhouse_no.SelectedValue.ToString(), Dbank_no.SelectedValue.ToString(), Dlevel_no.SelectedValue.ToString()).Copy(); 这里先把数据添加到消息队列,然后再返回一个表。
if (dt.Rows.Count == 10) //固定只显示最新的十条记录
{
dt.Rows.RemoveAt(0);
}
dt.Merge(dtm);
GridView1.DataSource = dt;
GridView1.DataBind();
List.Clear();
flag = false; //这里有停止,我的目的是:随机产生0-5的数字,当第一个数为0时,不存入list中;不为0,存入list;直到再产生0,把第一个产生的不为零的数作为重量,这个时候循环就停止了。
}
}
}
}
不是,滚动我是在页面上有一个gridview,把要滚动的记录放在datatable里面,在把gridview的数据源设为datatable。
80个肯定不会出现这种问题的,线程的初始化主要是分配堆栈空间要点时间,启动线程是系统自动调度的
曾经做过模拟1000个webservice客户端,循环调用webservice的测试
用线程池和线程并没有发现任何明显区别,更没发现用线程性能就快了(注意我是先用循环初始化好了1000个Thread),然后再次循环启动的,也没发现快了)
用的就是普通的双核PC机
不是,滚动我是在页面上有一个gridview,把要滚动的记录放在datatable里面,在把gridview的数据源设为datatable。Thread f = new Thread(MessQueue.Receive);那你这个线程是用来干嘛的~
不是,滚动我是在页面上有一个gridview,把要滚动的记录放在datatable里面,在把gridview的数据源设为datatable。Thread f = new Thread(MessQueue.Receive);那你这个线程是用来干嘛的~我这个把重量去读过来之后,可以在StartLinsterToGetWeightA()方法中看到调用messqueue.AddWeightData(....),messqueue.AddWeightData(....)把数据存到消息队列中。Thread f = new Thread(MessQueue.Receive);用来从消息队列中取数据,存到数据库和csv文件。
曾经做过模拟1000个webservice客户端,循环调用webservice的测试
用线程池和线程并没有发现任何明显区别,更没发现用线程性能就快了(注意我是先用循环初始化好了1000个Thread),然后再次循环启动的,也没发现快了)
用的就是普通的双核PC机但是,在执行timer_tick的时候把timer.enable=false了。他只能再接到Timer.Enabled = true;才会间隔多少时间后再执行timer_tick。
不要老拿单机的思路去做BS
它绝对不是单机程序中窗口和代码的关系
而不是BS架构中客户端/服务端的机制
根本没有考虑到客户端和服务端需要通信,通信又是怎样的过程,这个问题
虽然asp.net封装的很傻瓜,让你平时应用起来感觉和winform没什么区别一样
但是你不真正了解这个机制,而滥用winform里的代码,就会引发意想不到的问题
但是绝不是web开发就跟winform开发一样了
它毕竟还是不一样
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。很抱歉我也没看懂。只是觉得好蛋疼。能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。很抱歉我也没看懂。只是觉得好蛋疼。能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。
在BS中使用多线程,本身就是很蛋疼的一件事
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。很抱歉我也没看懂。只是觉得好蛋疼。能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。很抱歉我也没看懂。只是觉得好蛋疼。能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。能否回答下这个问题:timer的interval 被你设成了多少毫秒?
请你帮我看看我这个,我这个是两台称重仪,timer负责接收数据,并滚动显示在页面上。很抱歉我也没看懂。只是觉得好蛋疼。能问一下timer的interval 被你设成了多少毫秒吗?如果是我在写这段代码,我看到这么不确定的滚动,我会把这个interval 设成60*1000ms甚至更大,然后在1分钟内单步调试看结果。还有一个问题,多线程读写队列,要么用锁,要么用同步队列,否则总会出错的。我知道哪里错了,在代码里面有一个让线程停止1秒的代码,把那删了就可以了。也不知道为什么删了就可以了。看你们说的我的代码是不是问题很多呢?我那滚动的那些数据是在模拟从称重仪读取出来的数据。能否回答下这个问题:timer的interval 被你设成了多少毫秒?2000毫秒
2000毫秒2000ms,前台后台交互的通信消耗+视觉滞留,差不多了吧~
没删sleep(1000)那行代码前,就不一定了。。你可以试试不断调整timer的interval 值,从500,1000,2000,5000,测试一下~
2000毫秒2000ms,前台后台交互的通信消耗+视觉滞留,差不多了吧~
没删sleep(1000)那行代码前,就不一定了。。你可以试试不断调整timer的interval 值,从500,1000,2000,5000,测试一下~
我测试了一下,不断地调整timer的interval 值,随着间隔的增大,滚动的速度也在减慢。这个间隔时间的长短没有影响到停止暂停的缓慢。