如何在单击按钮时使用分开的PostBacks运行两个不同的事件

本文关键字:运行 两个 事件 PostBacks 按钮 单击 | 更新日期: 2023-09-27 17:58:13

我有一个代码为的按钮

protected void Button1_Click(object sender, EventArgs e) {
    Label1.Text = "Searching for services";
    UpdatePanel1.Update();
    }

但除此之外,我需要在找到我的服务时显示一些内容,所以我添加了另一个事件:

    Button1.Click += (s, k) => {
        discovery.FindAlreadyRegisteredServices();
        discovery.discoveryClient.FindCompleted += FoundEvent;
        auto[1].WaitOne();
        UpdatePanel1.Update();
    };

其速度较慢(由AutoResetEvent控制)

protected void FoundEvent(object sender, FindCompletedEventArgs e) {
    Label1.Text = "Found " + ((discovery.endpoints.Count > 0) ? discovery.endpoints[0].Address.ToString() : "nothing");
    auto[1].Set();
}

问题是,我的Button1.Click += (s, k) =>根本没有意义,因为它在Button1_Click之后执行,而在所有绑定事件完成之前没有PostBack

我知道通过使用UpdateProgressjavascript,我可以在客户端上使用我想要的一切,但我想要的是客户端发送2个事件,等待2个答案,制作2个PostBacks。有可能吗?

如何在单击按钮时使用分开的PostBacks运行两个不同的事件

protected void Button1_Click(object sender, EventArgs e) {
    Label1.Text = "Searching for services";
    //change postback hooks
    Button1.Click -= Button1_Click;
    Button1.Click += AnotherEventPB;
    ScriptManager.RegisterStarupScript(this, GetType(), postback, "__doPostBack();", true);
    UpdatePanel1.Update();
}
protected void AnotherEventPB(object sender, EventArgs e)
{
        //reset postback hooks
        Button1.Click -= AnotherEventPB; 
        Button1.Click += Button1_Click;
        discovery.FindAlreadyRegisteredServices();
        discovery.discoveryClient.FindCompleted += FoundEvent;
        auto[1].WaitOne();
        UpdatePanel1.Update();
}

我知道我可以通过使用UpdateProgress和javascript在客户端上使用我想要的一切,但我希望客户端发送2个事件并等待2个答案,生成2个PostBacks。

为什么?这似乎是一个任意的约束,使原本微不足道的任务变得不必要地复杂。