我有两种形式叫做 frm1 和 frm2 :
public partial class frm1 : Form
{
private WebMethods wm;
public frm1()
{
InitializeComponent();
}
private void button_Click(object sender, EventArgs e)
{
wm = new WebMethods();
wm.test();
}
}
public partial class frm2 : Form
{
private WebMethods wm;
public frm2()
{
InitializeComponent();
}
private void button_Click(object sender, EventArgs e)
{
wm = new WebMethods();
wm.test();
}
}
现在我有一个名为 WebMethods 的课程:
class WebMethods
{
private BackgroundWorker backgroundWorker;
public void stop(){
backgroundWorker.CancelAsync();
}
public void test()
{
if (backgroundWorker.IsBusy != true)
{
this.backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += new DoWorkEventHandler(_PostRequest);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_PostRequestComplet ed);
backgroundWorker.RunWorkerAsync();
}
}
private void _PostRequest(object sender, DoWorkEventArgs e)
{
// ...
}
private void _PostRequestCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// ...
}
}
现在我想要当 backgroundworker 线程完成并且 _PostRequestCompleted 事件执行时,它会通知执行 test()方法的表单。
例如 frm1 在 _PostRequestCompleted()方法执行 test()方法时通知 frm1 该线程结束了。例如 _PostRequestCompleted 在完成线程后在 frm1 中执行方法。
但我不知道这是怎么回事?
答案 0 :(得分:1)
在event
类中声明WebMethods
并在表单类中注册它。
class WebMethods
{
public event EventHandler PostRequestCompletedEvent;
private void _PostRequestCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// ...
if (PostRequestCompletedEvent != null)
{
PostRequestCompletedEvent(this, new EventArgs());
}
}
}
现在在表单类中注册此事件。
public partial class frm1 : Form
{
private WebMethods wm;
public frm1()
{
InitializeComponent();
}
private void button_Click(object sender, EventArgs e)
{
wm = new WebMethods();
wm.PostRequestCompletedEvent += wm_PostRequestCompletedEvent;
wm.test();
}
void wm_PostRequestCompletedEvent(object sender, EventArgs e)
{
// notify frm1 that thread was finished
}
}
public partial class frm2 : Form
{
private WebMethods wm;
public frm2()
{
InitializeComponent();
}
private void button_Click(object sender, EventArgs e)
{
wm = new WebMethods();
wm.PostRequestCompletedEvent += wm_PostRequestCompletedEvent;
wm.test();
}
void wm_PostRequestCompletedEvent(object sender, EventArgs e)
{
// notify frm2 that thread was finished
}
}