我正在将我的应用程序(使用自定义动态磁贴)重写为通用应用程序。以前,我使用第 3 方库来渲染这些自定义动态磁贴。这个库不再受支持,所以我必须找到一种新的方法来做到这一点。似乎 XamlRenderingBackgroundTask是目前唯一的前进方向,但这是在 C++ 中。我的应用程序的其余部分在 C# 中。
我的后台任务应该从公共(public) API 获取数据(例如天气),并使用此信息来渲染动态图 block 。我已经编写了用于获取数据的类(我也在主应用程序中使用它们),但这些是用 C# 编写的。
现在,使用 Windows 运行时组件应该可以“混合”不同的语言(对吗?)。但是我该如何实现呢? (缺少具体示例)。
简而言之:如何从我的 C++ 后台任务中调用 C# 函数(将返回数据)?
我已经创建了一个非常示例 - 我想从我的 C++ 后台任务运行 RunTheFunction 和 RunAnotherFunction。
public class StackOverFlowExampleClass()
{
public string Name { get; set; }
public string Value { get; set; }
}
public class StackOverFlowExampleClass2()
{
public string UpperString { get; set; }
}
public async Task<StackOverFlowExampleClass> RunTheFunction(int ParameterValue)
{
StackOverFlowExampleClass overflowClass = new StackOverFlowExampleClass();
overflowClass.Name = "Stack Overflow";
overflowClass.Value = 1 + ParameterValue;
// DO SOME COOL ADVANCED HTTP STUFF
return overflowClass;
}
public async Task<StackOverFlowExampleClass> RunAnotherFunction(string ExampleString)
{
StackOverFlowExampleClass2 overflowClass2 = new StackOverFlowExampleClass2();
overflowClass2.UpperString = ExampleString.ToUpper();
return overflowClass2;
}
在正常的 C# 后台任务中,我会这样做:
StackOverFlowExampleClass SFClass = await stackoverflowexample.RunTheFunction(10);
StackOverFlowExampleClass2 SFClass = await stackoverflowexample.RunAnotherFunction("stackoverflow");
///// render SFClass.Value + SFClass.Name as a PNG
///// set tile title to SFClass.UpperString
我如何在 C++ 中执行此操作?
最佳答案
您可以查看 Visual C++ Compiler November 2013 CTP ,一些漂亮的例子来做这样的事情: __await FileIO::WriteTextAsync(文件, 文件->名称);
它看起来还不太好,很可能在未来的版本中会出现标准的发展、新的和更好的(至少是标准的)方法来做到这一点。
关于c# - 如何从 C++ 后台任务(Windows 通用应用程序)调用 C# 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910279/