繁体   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