簡體   English   中英

.NET 核心 - BLAZOR - 自定義組件 - 將異步任務存儲在字典中以供以后與 EventCallback 一起使用

[英].NET Core - BLAZOR - Custom component - Store async Task in dictionary for later usage with EventCallback

我有一個定制的 Blazor 組件,它有一個帶參數的字典。

它是一個通用組件,位於主布局<SharedComponent></SharedComponent>中。

該組件在其中呈現另一個組件並通過字典傳遞參數 - 在下面的代碼行中, dic 是parameters 以下代碼呈現子組件。

ComponentService.Add<ChildComponent>(text, parameters, taskParameters);

PS:有兩個字典: - 一個用於普通參數; - 一個用於功能。


我認為應該如何實現:

  1. 將異步任務存儲到具有Func委托的字典中。
  2. 稍后檢索它並將其分配給多播委托。
  3. 創建新的 EventCallback 並將委托傳遞給它。
  4. 調用傳遞返回項的回調事件。

我的問題:

這是完全正確的方法還是有其他方法?


到目前為止我已經嘗試過什么,我需要一些幫助......

這是字典:

public class ComponentTaskParameters
{
    private Dictionary<string, Func<Task>> taskPparameters;

    public ComponentTaskParameters()
    {
        taskPparameters = new Dictionary<string, Func<Task>>();
    }

    public void Add(string parameterName, Func<Task> value)
    {
        taskPparameters[parameterName] = value;
    }

    public Func<Task<T>> Get<T>(string parameterName)
    {
        if (!taskPparameters.ContainsKey(parameterName))
        {
            throw new KeyNotFoundException($"{parameterName} does not exist in component parameters");
        }

        return (Func<Task<T>>)taskPparameters[parameterName];
    }
}

假設這是異步 function:

async Task SaveItem(Item item)
{
    // save code
}

我試圖用FuncAction將它存儲到字典中,但沒有運氣。

我怎么能做到這一點,它是否可以實現?


我創建了一個代表

delegate Item SaveItemDelegate(Func<Task, Item> saveTask);

我無法將檢索到的 function 從字典中添加到委托中。

這是我創建EventCallback的方法

var callbackEvent = new EventCallback<Item>(null, saveItemDelegate);

而且我無法使用CallbackEvent.InvokeAsync(Item); .

感謝這里的所有幫助。

謝謝!

解決方案是將 SaveItem function 作為多播委托存儲在字典中。

// Insert into dict function
public void Add(string parameterName, MulticastDelegate value)
{
    taskPparameters[parameterName] = value;
}

// Declaration of the delegate
public delegate Task SaveDelegate(Item item);

// New delegate
SaveDelegate saveDelegate = new SaveDelegate(SaveItem);

// Store the delegate in the dictionary
taskParameters.Add("CallbackFunction", saveDelegate);

然后我能夠檢索它並將其傳遞給EventCallback 然后成功調用它。

// Pull out from the dict function
public MulticastDelegate Get(string parameterName)
{       
    return taskPparameters[parameterName];
}

// The delegate
MulticastDelegate save = TaskParameters.Get("CallbackFunction");

// Create new 'EventCallback'
EventCallback callback = new EventCallback(null, save);

// Invoke the 'EventCallback'
callback.InvokeAsync(item);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM