簡體   English   中英

如何創建進行異步調用的自定義 PropertyGrid 編輯器?

[英]How to create a custom PropertyGrid editor that makes async calls?

我有一個自定義的 PropertyGrid 編輯器,它啟動一個表單並允許用戶進行一些選擇。 這些選擇用於提供屬性值。 該表單調用 web 服務以檢索數據以供用戶選擇。 目前,此 web 服務調用是同步完成的。 據我了解,理想情況下,此類調用應異步進行,以免凍結應用程序。

有沒有辦法可以異步執行此操作?

似乎我需要使我的 EditValue 方法異步,但是我覆蓋的 class (UITypeEditor)似乎沒有這個選項。

這個答案為我如何實現我的自定義 PropertyGrid 編輯器提供了一個很好的背景。 但是,我還將提供一個非常基本的代碼片段,以大致了解我正在嘗試做什么。 在此示例中,我沒有使用表單,但要了解的重要一點是,我正在嘗試在我的 EditValue 方法中等待異步調用。

class FooEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
    {
        using (var client = MasterContainer.Resolve<ValueWebClient>())
        {
            var value = await client.GetCurrentValue(); // visual studio shows await can only be used in async method error
            return value;
        }
    }
}

我想一種方法可能是預先加載所有數據,這樣您就不必打電話了。 但是,數據可能會在用戶工作時更改,所以我不希望采用這種方法。

如果不將方法的返回類型更改為Task<object> ,則不能在EditValue方法中使用async關鍵字。

假設您擁有UITypeEditor基礎 class,這將是一個不錯的選擇。

當前的 API ( object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value ) 確實是同步的,盡管我似乎是一個很好的妥協。預先加載數據似乎不太好。

暫無
暫無

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

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