我正在将我的应用程序(带有自定义实时磁贴)重写为通用应用程序。以前,我使用3rd party库来渲染这些自定义实时磁贴。该库不再受支持,因此我必须找到一种新的方法来执行此操作。看来XamlRenderingBackgroundTask是目前唯一的前进方式,但这是在C++中。以及我在C#中其余的应用程序。
我的后台任务应该从公共(public)API(例如天气)中获取数据,并使用此信息来渲染实时图块。我已经编写了类来获取数据(我也在主应用程序中使用了它们),但是这些都是用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(file,file-> Name);
它看起来还不太好,并且可能会在将来的版本中出现标准的,不断发展的,更好的新方法(至少是标准方法)。