Timer控件的Timer_tick事件不触发

zw880322 2010-10-27 02:28:14
我在我的一个页面的button的click事件里这么写的

private oid button_click(object sender,EventArgs e)
{
progressBar1.Visible = true;
timer1.Start();
try
{
ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
progressBar1.Value = 100;
}
catch (Exception ex)
{
MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
}
}

private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < 100)
{
progressBar1.Value = progressBar1.Value + 1;
}
else
{
timer1.Stop();
}
}



我运行的时候,进度条没有动,这个怎么弄哇,我记得timer应该相当于另开一个线程运行代码的呀
...全文
522 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
didiaogao 2010-10-27
  • 打赏
  • 举报
回复
timer 是有一个属性设置执行间隔的。i打头的。 你试一下看好使不
还有start() 和Enable=true 效果是一样的
让爱延续 2010-10-27
  • 打赏
  • 举报
回复
判断一个代码是否执行了 打个断点就OK啦。
ZengHD 2010-10-27
  • 打赏
  • 举报
回复
搞错了,应该把ItemKit这行代码放到线程里

ZengHD 2010-10-27
  • 打赏
  • 举报
回复
因为System.Windows.Forms.Timer也是运行在主线程上的,会被阻塞的
可以试试System.Timers.Timer
或者
System.Threading.Timer
ZengHD 2010-10-27
  • 打赏
  • 举报
回复
        
测试过,有效果
但我不知道ItemKit是什么,所以使用一个while(true)代替

private bool m_bExit = false;

private void button1_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
progressBar1.Maximum = 100;
progressBar1.Value = 0;

System.Threading.ThreadPool.QueueUserWorkItem(fun, null);

try
{
//这里使用死循环代替下面注释的代码
while (!m_bExit)
{
Application.DoEvents();
}
//ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
progressBar1.Value = 100;
}
catch (Exception ex)
{
MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
}
}

private void fun(object obj)
{
while (true)
{
if (progressBar1.Value >= progressBar1.Maximum)
{
m_bExit=true;
break;
}
Invoke(new MethodInvoker(delegate
{
progressBar1.Value = progressBar1.Value + 1;
}));

System.Threading.Thread.Sleep(10);
}
}
vpoint2009 2010-10-27
  • 打赏
  • 举报
回复
我的确遇到过timer不触发的情况,在wpf里,原因不明。
zw880322 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 loveirenesomuch 的回复:]
引用 5 楼 jiangchunfeng 的回复:

timer的Enabled属性设置位true没,如果没设置timer的事件是不触发的

+1
[/Quote]

。。。
这个是设置的是在页面打开的时候就自动启动的
天煞19 2010-10-27
  • 打赏
  • 举报
回复
祝你好运了
火柴没帽 2010-10-27
  • 打赏
  • 举报
回复
把你代码里的timer1.Start()和timer1.Stop()分别改成timer1.Enable=ture和time1.Enable=false;
火柴没帽 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangchunfeng 的回复:]

timer的Enabled属性设置位true没,如果没设置timer的事件是不触发的
[/Quote]
+1
zw880322 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zenghd 的回复:]
C# code
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
progressBar1.Maximum = 100;
progressBar1.Value = 0;……
[/Quote]

你写的不行啊 ,在Invoke这里就没反应了
jiangchunfeng 2010-10-27
  • 打赏
  • 举报
回复
timer的Enabled属性设置位true没,如果没设置timer的事件是不触发的
flyerwing 2010-10-27
  • 打赏
  • 举报
回复
是不是主线程.
TIMER是不是启动了.
ZengHD 2010-10-27
  • 打赏
  • 举报
回复
      private void button1_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
progressBar1.Maximum = 100;
progressBar1.Value = 0;

System.Threading.ThreadPool.QueueUserWorkItem(fun, null);

try
{
ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
progressBar1.Value = 100;
}
catch (Exception ex)
{
MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
}
}

private void fun(object obj)
{
while (true)
{
if (progressBar1.Value >= progressBar1.Maximum)
{
break;
}
Invoke(new MethodInvoker(delegate
{
progressBar1.Value = progressBar1.Value + 1;
}));

System.Threading.Thread.Sleep(10);
}
}
qqrto 2010-10-27
  • 打赏
  • 举报
回复
楼主最好把上传图片放到子线程里面去做,在主线程里面用计时器滚动进度条
qqrto 2010-10-27
  • 打赏
  • 举报
回复
计时器并不是另开一个线程,它也是在主线程当中的

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧