【发布时间】:2018-09-14 14:26:53
【问题描述】:
我按照前面声明中的建议使用了 backgroundworker,它可以工作。但是我有一个新问题,就是按下Stop按钮后,线程无法重新启动,必须点击2次
private bool _stopLoop;
private void button1_Click(object sender, EventArgs e)
{
this.BW_PING.RunWorkerAsync();
this.btPing.Enabled = false;
_stopLoop = false;
}
private void Ping(bool Type)
{
for (int i = 0; i < 100000 && !_stopLoop; ++i)
{
using (Ping p = new Ping())
{
Ping pingClass = new Ping();
PingReply pingReply = pingClass.Send(tbUrl.Text);
lbPing.Text = ("Ping - " + pingReply.RoundtripTime.ToString() + " Ms");
}
}
}
private void btStop_Click(object sender, EventArgs e)
{
_stopLoop = true;
this.btPing.Enabled = true;
lbPing.Text = ("Ping Stoped");
}
private void BW_PING_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
Ping(true);
}
谁能帮帮我?
【问题讨论】:
-
_stopLoop = false;将此行放在button1_Click函数的开头
-
as suggested in the previous Statement, but I have a new problem- 你在说什么? -
您的代码似乎不完整... - 您永远不会停止后台工作程序,但在每个按钮单击时您都试图再次运行它 - 出于某种原因,您将
sender转换为BW_PING_DoWork但从不使用那 - 我们是在玩拼图,我们应该填补空白吗?还是我错过了什么? -
是否意味着我只需要阻止后台工作人员?
-
问题只包含部分问题。尝试给minimal reproducible example。不相关的提示:您不需要将要分配给
Text属性的任何值括起来。
标签: c#