Вот структура и конфигурация моего проекта.
Структура проекта
Код: Выделить всё
ProjectX.sln
├── ProjectX (Package)
│ ├── Package.appxmanifest
│ └── ProjectX (Package).wapproj
├── ProjectX.BackgroundTask (Class Library)
│ ├── ProjectX.BackgroundTask.csproj
│ └── WallpaperTask.cs
└── ProjectX.Core
└── Services
└── BackgroundTaskService.cs
Я настроил проект как компонент CsWinRT с включенным WindowsAppSDKBackgroundTask.
Код: Выделить всё
net9.0-windows10.0.22621.0
Library
true
true
ProjectX.BackgroundTask.WallpaperTask
...
Я вручную включаю в пакет DLL фоновой задачи, WinMD и хост-библиотеку WinRT.
Код: Выделить всё
[*]ProjectX.BackgroundTask.winmd
PreserveNewest
WinRT.Host.dll
PreserveNewest
ProjectX.BackgroundTask.dll
PreserveNewest
Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.dll
PreserveNewest
Я использую точку входа UniversalBGTask и регистрирую свою задачу в качестве суррогатного COM-сервера.
Код: Выделить всё
Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.dll
Соответствует CLSID в манифесте.
Код: Выделить всё
[ComVisible(true)]
[Guid("12345678-1234-1234-1234-123456789abc")] // Matches manifest
public sealed class WallpaperTask : IBackgroundTask
{
private BackgroundTaskDeferral _deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
// I grab the deferral immediately
_deferral = taskInstance.GetDeferral();
// Start async work (Void return to keep Run synchronous)
_ = RunAsyncWork();
}
private async Task RunAsyncWork()
{
try
{
// ... Application Logic ...
}
finally
{
_deferral?.Complete();
}
}
}
Я регистрируюсь через SetTaskEntryPointClsid, используя тот же GUID для настройки 15-минутного интервала.
Код: Выделить всё
var builder = new BackgroundTaskBuilder();
builder.Name = "WallpaperBackgroundTask_TimeTrigger_15min";
// Register using CLSID instead of string EntryPoint
builder.SetTaskEntryPointClsid(Guid.Parse("12345678-1234-1234-1234-123456789abc"));
// 15 minute trigger
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();
- Правильна ли моя конфигурация Package.appxmanifest для WindowsAppSDKBackgroundTask, запускаемого через TimeTrigger?
- Правильно ли работает SetTaskEntryPointClsid с точкой входа UniversalBGTask, определенной в манифесте?
- существуют ли какие-либо известные проблемы с .NET 9 и CsWinRTComponent, которые препятствуют запуску процесса фоновой задачи?
Подробнее здесь: https://stackoverflow.com/questions/798 ... om-cswinrt
Мобильная версия