调用带有签名(例如)的委托(Func在ASP.NET中使用同步执行类型
本文关键字:ASP NET 类型 执行 同步 例如 Func 调用 | 更新日期: 2023-09-27 18:09:33
乍一看似乎是这样。对调用堆栈的快速检查显示,传递给委托的方法按预期执行。然而…
在"click事件"中调用委托并尝试修改控件(例如可见性,绑定,更新更新面板)时什么都不会发生(实际上对于显式调用UpdatePanel。Update抛出一个异常,表示该方法不能在渲染之后调用-尽管出于所有意图和目的,我明显不在页面生命周期的那个阶段,而是在控制事件中-总是作为回发事件处理,总是在渲染之前,据我所知。)
然而…当返回调用站点并执行我试图执行(从委托调用的方法内)以影响各种控件的更改的相同代码(就在委托调用之后)时,它有效。
发生了什么事?
编辑框架代码:
IModalWorkflowItem
{
void ExecuteWorkflow();
.....
}
public abstract class BaseModalWorkflow : IModalWorkflowItem
{
....
protected Func<String, IMinervaValidator , Boolean>_action;
....
/// <summary>
/// Using the properties (if necessary) perform the action
/// required on completion of modal workflow
/// </summary>
/// <returns></returns>;
protected abstract Boolean PerformAction(PropertyBag properties);
}
在lambda中作为匿名方法创建对象…
new ModalWorkflowUserGroupAction(ModalPopupExtender_UserPrompt,
Session,
(x, y) =>
{
if (UserGroupManager.UserAccessToUserGroup(membershipID,
CurrentUserGroup.UserGroupID, false))
{
BindUserList();
实际调用:
/// <summary>
/// Call the next action in the modal workflow.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ExpandingButton_ModalConfirmContinue_Click
(Object sender, EventArgs e)
{
if (CurrentModalWorkFlowItem != null)
{
CurrentModalWorkFlowItem.ExecuteWorkflow();
是的,在任何。net程序类型中,调用任何委托都是同步发生的。这种事情不会因为你碰巧使用了ASP.NET而突然改变。