C# UWP仅后台应用程序和异步
我有一个关于UWP应用程序生命周期和代码结构的问题。它只涉及后台服务,我在任何地方都找不到答案,尽管这可能是因为作为这个领域的n00b,我不知道我想问什么问题 我在我的RPi(raspbian/C++)上摆弄着一个项目,读取一些传感器并根据这些值做一些事情,这将是全天候运行的。不过我对C++的速度很慢,所以我想我会使用UWP/IOT回到C/.NET的相对安全性。这个应用程序将是无头的,因为它将有一个单独的基于USB的触摸/显示单元(来自4d) 所以我希望它只在后台运行,作为一个守护进程/服务24/7运行。这是UWP上可能/推荐的模型吗?我在一些博客上看到过相反的说法 假设没问题,我需要读取SPI,以便使用异步方法,但我想我也需要使我的运行入口点异步?在这种情况下,为了避免混合使用同步和异步代码,逻辑结论是所有代码/每个方法都需要异步?是这样吗 在这种异步/UWP情况下,什么是典型主回路的等效物:C# UWP仅后台应用程序和异步,c#,background,uwp,iot,C#,Background,Uwp,Iot,我有一个关于UWP应用程序生命周期和代码结构的问题。它只涉及后台服务,我在任何地方都找不到答案,尽管这可能是因为作为这个领域的n00b,我不知道我想问什么问题 我在我的RPi(raspbian/C++)上摆弄着一个项目,读取一些传感器并根据这些值做一些事情,这将是全天候运行的。不过我对C++的速度很慢,所以我想我会使用UWP/IOT回到C/.NET的相对安全性。这个应用程序将是无头的,因为它将有一个单独的基于USB的触摸/显示单元(来自4d) 所以我希望它只在后台运行,作为一个守护进程/服务24
while(true)
{
//do something
}
对如何将我有限的知识转移到异步UWP世界感到困惑…您试图做的事情只能在Windows IoT(raspberry)上实现。 您可以创建一个将永远运行的无头应用程序 您可以在这里找到一个很好的起点: 这里还有一个简单的示例: 您首先需要安装项目模板,该模板可从以下位置获得:
Run()
方法结束时结束。如果您检索延期,则仅当您完成延期时,延期才会结束
public sealed class MyLongRunningBackgroundTask : IBackgroundTask
{
BackgroundTaskDeferral deferral;
public async void Run(IBackgroundTaskInstance taskInstance)
{
// We retrieve the deferral to prevent the task to stop
deferral = taskInstance.GetDeferral();
// Run loop calling asynchronous methods
// It can also be a timer or an event callback registration
while(true)
{
await doSomethingAsync()
}
}
}
如果您想结束任务,那么只需调用deleral.Complete()
也可以注册后台任务取消事件,以便操作系统在您的任务取消时通知您,并优雅地关闭您正在使用的资源
public async void Run(IBackgroundTaskInstance taskInstance)
{
taskInstance.Canceled += OnCanceled;
}
private void OnCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
{
// Cleanup
}