【问题标题】:How to use asynchronous event-handler for emitted event?如何对发出的事件使用异步事件处理程序?
【发布时间】:2019-01-25 15:10:45
【问题描述】:

我有一个父组件和一个子组件。在子组件中,我向父组件发出一个事件。但是我希望此 Actionasync,因为我希望父组件在收到时执行 async 操作事件。我该怎么做?

儿童

@functions{
[Parameter] protected Action onclose { get; set; }
[Parameter] protected  Action<bool> onsubmit { get; set; } //i want this handler to be async in the parent

string campaign; 
public async Task OnSubmitAsync() {
   var created = await this.service.CreateCampaignAsync(parameters);
        Console.WriteLine("Result of creation:" + created.ToString());
        this.onsubmit?.Invoke(created);
    }

家长

 <CampaignForm onclose="@(()=>OnModalClosed())" onsubmit="@(async(x)=>OnSubmit(x))"></CampaignForm>
    @functions{
       public async Task OnSubmit(bool value) {
                //do some awaiting here 
       }
       public void OnModalClose()=>....; //do something sync ;
    }

【问题讨论】:

    标签: c# asynchronous eventemitter blazor


    【解决方案1】:

    在子组件上执行此操作:

    @functions{
        // Define a property to store the Action delegate 
        [Parameter] protected  Action<bool> onsubmit { get; set; } 
    
        // More code here...
    
        public async Task OnSubmitAsync() {
       var created = await this.service.CreateCampaignAsync(parameters);
            Console.WriteLine("Result of creation:" + created.ToString());
            // Call back the parent's method
            onsubmit?.Invoke(created);
        }
    
     }
    

    在父组件上执行此操作: 请注意,您应该将 OnSubmit 方法的标识符分配给 func 委托属性 onsubmit (onsubmit="OnSubmit")

     <CampaignForm onclose="OnModalClosed" onsubmit="OnSubmit"></CampaignForm>
        @functions{
           public async void OnSubmit(bool value) {
                    //do some awaiting here 
           }
           public void OnModalClose()=>....; //do something sync ;
        }
    

    希望这会有所帮助... 如果对您有帮助,请将我的回答标记为已接受希望这会有所帮助...

    【讨论】:

    • 我用Action&lt;bool&gt; 对孩子进行了尝试,而父处理程序是async method(bool variable) { } 并且它以某种方式工作。
    • OK... 经过一番思考后,我意识到 Action 委托实际上是合适的,但我猜 Func 是一个更好的选择因为它描述了一个具有单个 in 参数 (bool) 和一个 out 参数 Task 的委托。如果要使用 Action 委托,请将返回类型从 Task 更改为 void,这是事件的返回类型。我会相应地编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多