Как использовать асинхронный обработчик событий для создаваемого события? - PullRequest
0 голосов
/ 25 января 2019

У меня есть родительский и дочерний компоненты. В дочернем элементе я отправляю событие для родителя. Однако я хочу, чтобы Action было async, поскольку я хочу, чтобы родитель выполнил операцию 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 ;
    }

1 Ответ

0 голосов
/ 25 января 2019

Сделайте это на дочернем компоненте:

@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 ;
    }

Надеюсь, это поможет ... Пожалуйста, пометьте мой ответ как принятый, если он вам помог. Надеюсь, это поможет ...

...