'system.Action'不是有效的Windows运行时参数类型

时间:2019-06-18 10:37:16

标签: javascript c# uwp

在uwp c#Windows运行时组件项目中,我想公开一个webview js可以通过一些回调调用它的api。 所以我正在尝试:

// c#
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
    public void setOnChange(string name,System.Action action) {
       xxx
    }
}
// js
windows.xx.setOnChange("js",function(){xxx});

然后我得到'system.Action'不是有效的Windows运行时参数类型错误。

然后我尝试另一种方式:

//c#
public delegate void Action();
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
    public void setOnChange(string name,Action action) {
       xxx
    }
}
// js
windows.xx.setOnChange("js",function(){xxx});

c#可以编译,并且setOnChange被调用,但是js不被调用。

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方法:

//c#
[Windows.Foundation.Metadata.AllowForWeb]
public sealed class xx{
    public void setOnChange(string name,EventHanlder<Object> action) {
       xxx
    }
}
// js
windows.xx.setOnChange("js",function(){xxx});

我猜想EventHanlder 是Windows运行时组件中的一种特殊类型。

Ps:我已阅读https://docs.microsoft.com/en-us/windows/uwp/winrt-components/raising-events-in-windows-runtime-components的文档。 然后,我发现可以使用带有事件处理程序的类包装来完成。它在js和c#中都有很多代码,然后我尝试将事件处理程序嵌入参数中,然后开始工作。 uwp的隐藏/非文档功能?