如何在单击按钮时使用分开的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
?
我知道通过使用UpdateProgress
和javascript
,我可以在客户端上使用我想要的一切,但我想要的是客户端发送2个事件,等待2个答案,制作2个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。
为什么?这似乎是一个任意的约束,使原本微不足道的任务变得不必要地复杂。