Xamarin.Ios BeingBackgroundTask 参数

Posted

技术标签:

【中文标题】Xamarin.Ios BeingBackgroundTask 参数【英文标题】:Xamarin.Ios BeingBackgroundTask parameters 【发布时间】:2022-01-19 09:32:21 【问题描述】:

我正在尝试来自 Xamarin 的这段代码。后台任务的 ios 文档:https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/ios-backgrounding-with-tasks。它表示 第 6 行 中的变量taskId 具有CS0841: Cannot use local variable 'taskId' before it is declared。我应该如何分配taskId?另外,你如何声明myFlag?我找不到任何关于如何使用这个变量的描述。

Task.Factory.StartNew( () => 

    //expirationHandler only called if background time allowed exceeded
    var taskId = UIApplication.SharedApplication.BeginBackgroundTask(() => 
        Console.WriteLine("Exhausted time");
        UIApplication.SharedApplication.EndBackgroundTask(taskId); 
    );
    while(myFlag == true)
    
        Console.WriteLine(UIApplication.SharedApplication.BackgroundTimeRemaining);
        myFlag = SomeCalculationNeedsMoreTime();
    
    //Only called if loop terminated due to myFlag and not the expiration of time
    UIApplication.SharedApplication.EndBackgroundTask(taskId);
);

【问题讨论】:

是的,我已经解决了 【参考方案1】:

这是正确的链接:iOS Backgrounding with Tasks。

我应该如何分配taskId?

正如链接中提到的,taskId是注册过程中返回的唯一标识符,我们只需要在调用EndBackgroundTask时传递它。

nint taskID = UIApplication.SharedApplication.BeginBackgroundTask( () => );
UIApplication.SharedApplication.EndBackgroundTask(taskId);

如何声明 myFlag?

如果结束后台任务,该变量只是表示标志,如果您不想停止任务,只需将其设置为true

【讨论】:

注意:有问题的代码是该文档页面上的一个 sn-ps 的精确副本。 In section Avoiding App Termination With Expiration Handlers。所以看起来文档页面 sn-p 是错误的,甚至不会编译。

以上是关于Xamarin.Ios BeingBackgroundTask 参数的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?

使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角

Xamarin.iOS 和 RFComm

Xamarin.IOS 和 Signalr 推送通知

Xamarin.Ios BeingBackgroundTask 参数