用了backgroundWorker之后 timer不管用了

zyy2010 2013-03-12 11:28:01
我的代码大体是这个样子的:


private void beginAnalysisBtn_Click(object sender, EventArgs e)
{
label1.Visible = true;
timer1.Enabled = true;
//如果把下面这句注释掉 timer就管用,加上之后timer就不管用了,文字一直不变
this.backgroundWorker1.RunWorkerAsync(); //后台异步加载数据
}

/// <summary>
/// 改变Label的文字
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChangeText(object sender, EventArgs e)
{
if (label1.Text.Length < 12)
{
label1.Text = label1.Text + dotString[position++ % dotString.Length];
}
else
{
label1.Text = label1.Text.Substring(0,5);
}
}

/// <summary>
/// 后台异步加载数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
//读文件 比较耗时 读完之后再ListView显示
...//(代码省略)

timer1.Enabled = false;//读完以后 让timer失效 不再改变标签的文字
}


请各位大神给看看这是什么原因。
...全文
151 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
assky124 2013-03-12
  • 打赏
  • 举报
回复
把你的读文件的耗时长的方法移到 Background.DoWork事件中
assky124 2013-03-12
  • 打赏
  • 举报
回复
你的Background没有用到异步啊!
拥抱开源 2013-03-12
  • 打赏
  • 举报
回复
zyy2010 2013-03-12
  • 打赏
  • 举报
回复
引用 1 楼 unicorn_dsx 的回复:
backgroundWorker1_RunWorkerCompleted 把timer1设置不可用.??? 那你打算什么时候让timer1可用呢??
在用到backgroundWorker的前一句就设置为可用了,读文件的时间比较长,读完之后再设置不可用
xixihaha_2011_098 2013-03-12
  • 打赏
  • 举报
回复
backgroundWorker1_RunWorkerCompleted 把timer1设置不可用.??? 那你打算什么时候让timer1可用呢??
ArpSender是C#写的ARP发包器,写的初衷是想试下什么样的ARP包才会引起ARP攻击,构造一些包可能会导致别人上不了网。至于包怎么填,发挥大家的想象吧,嘿嘿。 ArpSender用了SharpPcap这个开源API,有兴趣的到网上查下,用起来挺简单的。编程过程中最大的问题就是线程的问题。发包的代码中用了BackgroundWorker控件,因为参数只能传一个,并且线程是不允许直接调用主窗口控件,后来用了一个结构体struct ArpPac来传,感觉还是很麻烦啊!不过还好在BackgroundWorker的RunWorkerCompleted可以直接操作主窗口控件了,能把结果显示到主窗口上。 在编写获取IP的MAC地址部分,一开始还是用BackgroundWorker,在获取存在的IP地址MAC时可以正常工作,可是当IP不存在是,DOWORK方法一直没结束。因为里面一个Resolve方法一直没返回,也没超时设定,线程就一直卡在那不动了。也不知道该怎么结束这个线程。于是改用了Thread,传参数用了个object数组,嘿嘿,所有参数都封起来。到了那边再解封,很好用。后来才发现,线程是没有返回值的。。又不能直接操作窗体控件。。没办法,只好设个全局变量来保存结果了。获取MAC部分还用了个Timer控件,1秒钟如果还没得到返回的MAC,直接结束该线程。。。 BackgroundWorker 用起来简单也很好用,如果有个abort方法的话。。。

111,097

社区成员

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

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

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