如何通知在其他类中执行线程的表单?

时间:2014-05-03 19:41:10

标签: c# multithreading

我有两种形式叫做 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 中执行方法。

但我不知道这是怎么回事?

1 个答案:

答案 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
    }
}