以下是我的编码:
Form2 msgForm;
private void button3_Click_1(object sender, EventArgs e)
{
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
msgForm = new Form2();
try
{
bw.RunWorkerAsync();
msgForm.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
// Coding that transmit protocol and will last around 2 minutes.
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
msgForm.Close();
}
Run Code Online (Sandbox Code Playgroud)
每次单击按钮发送持续约2分钟的协议时,我都会使用后台工作方法.在传输过程中,From2将显示"请稍候".
但是我使用这种编码有一些问题.问题是,当我第一次点击按钮时,它会发送一次协议.之后我再次点击这是第二次,它传输协议两次.之后我再次点击这是第三次,它将协议传输3次......依此类推.每次单击按钮时,传输协议的次数都会增加.
不是每次我点击按钮时它只会在void bw_DoWork中编码运行吗?
我的编码有问题吗?
每次单击时,您都会附加一个额外的处理程序,然后它会与之前添加的所有内容一起运行,并保持原样(因为对象仍在那里,您正在重新使用它).
要解决此问题,您需要:
DoWork处理程序像这样:
private void button3_Click_1(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
// rest of your code
}
Run Code Online (Sandbox Code Playgroud)
.DoWork += ...将处理程序附加到类的构造函数中这主要取决于你是否在其他地方使用该工作人员.
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |