WinUi 3 MVVM C# 应用程序需要后台文件同步 - 如何做到这一点?背景任务?

问题描述 投票:0回答:1

我用 C# 编写了一个 WinUi 3 MVVM 应用程序,用于将我的 Web 项目中的未来文件同步到 c:\*\Docs\myApp iles 中的用户处(托管在 Firebase 上)。

它已经连接到数据库了,现在我需要一种方法来定期同步文件。

我发现了一些关于后台任务的内容,尝试实现它但失败了。我发现这是针对 UWP 项目的,为时已晚。

基本问题,BackgroundTasks 是我需要的吗?还有其他方法吗? Windows 服务项目也许再见?

如果我需要后台任务,这里是我的文件:

包.appxmanifest

<Package [...]>
    <Applications>
        <Application Id="App"
          Executable="$targetnametoken$.exe"
          EntryPoint="$targetentrypoint$">
            [...]
            <Extensions>
                [...]
                <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.BackgroundTask">
                    <BackgroundTasks>
                        <Task Type="timer" />
                    </BackgroundTasks>
                </Extension>
            </Extensions>
        </Application>
    </Applications>
    <Extensions>
        <Extension Category="windows.activatableClass.inProcessServer">
            <InProcessServer>
                <Path>PitBoard ACC Livery Manager.dll</Path>
                <ActivatableClass ActivatableClassId="BackgroundTasks.BackgroundTask" ThreadingModel="both" />
            </InProcessServer>
        </Extension>
    </Extensions>
    [...]
</Package>

应用程序.xaml.cs

    public App()
    {
        InitializeComponent();

        Host = Microsoft.Extensions.Hosting.Host.
        CreateDefaultBuilder().
        UseContentRoot(AppContext.BaseDirectory).
        ConfigureServices((context, services) =>
        {
            [...]
            services.AddSingleton<BackgroundTaskService>();
        }).
        Build();

        UnhandledException += App_UnhandledException;
    }


    protected async override void OnLaunched(LaunchActivatedEventArgs args)
    {
        base.OnLaunched(args);

        await App.GetService<BackgroundTaskService>().RegisterBackgroundTasksAsync().ConfigureAwait(false);

    }

后台任务服务

    public async Task RegisterBackgroundTasksAsync()
    {
        BackgroundExecutionManager.RemoveAccess();
        var result = await BackgroundExecutionManager.RequestAccessAsync();

        if (result == BackgroundAccessStatus.DeniedBySystemPolicy
            || result == BackgroundAccessStatus.DeniedByUser)
        {
            return;
        }

        foreach (var task in BackgroundTasks)
        {
            task.Register();
        }
    }

同步后台任务

    public override void Register()
    {
        var taskName = GetType().Name;
        var taskRegistration = BackgroundTaskRegistration.AllTasks.FirstOrDefault(t => t.Value.Name == taskName).Value;

        if (taskRegistration == null)
        {
            var builder = new BackgroundTaskBuilder()
            {
                Name = taskName
            };

            // details at https://docs.microsoft.com/windows/uwp/launch-resume/create-and-register-an-inproc-background-task
            builder.SetTrigger(new TimeTrigger(30, false));

            // TODO: Find someone who can get this Background Task running
            builder.Register();
        }
    }

builder.Register();
抛出未处理的异常“值未落在预期范围内”

c# service synchronization winui-3 background-task
1个回答
0
投票

您是否成功使用 MVVM 实施后台任务?我也面临同样的问题,有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.