簡體   English   中英

C#Windows Phone 8.1運行時:如何使任務在應用程序生命周期之外生存?

[英]C# Windows Phone 8.1 runtime: how to make a task survive beyond app lifecycle?

我有這種任務

    private async Task SaveToFile(StorageFile file)
    {
        // prepare data
        await ...
        Debug.Writeline("completed");
    }

如果用戶按下“返回”按鈕,則此任務將無法完成。 我需要一種使它繼續進行直到完成所有操作的方法,即使調用應用程序不再運行。

不可以,如果父進程終止,則不能強制任務繼續運行。

也就是說,除非文件的保存時間超過10秒(在計算機語言中,這是永恆的),否則您所描述的問題並不是真正的問題。

用戶“退出”或手動退出后,Windows Phone應用程序將繼續在后台運行長達10秒鍾。 對於任何應用程序來說,這應該是足夠的時間來完成其“清理”操作。

請參閱: 應用程序生命周期Windows運行時應用程序

另請參閱: Windows Phone 8的應用程序激活和停用

您必須為此使用“后台任務” 這非常簡單,為后台任務創建一個新項目並將其添加到您的解決方案中,因為您的后台任務不是一個簡單的類,而是一個單獨的WINRT項目。 為此,請在解決方案資源管理器中右鍵單擊解決方案節點,然后選擇“添加”->“新建項目”。 然后選擇Windows運行時組件(Universal Windows)項目類型,命名該項目,然后單擊“確定”。 我在這里命名為“ BackgroundStuff”。 您可以為單個應用程序創建多個后台任務。 沒有任何限制。 考慮一個簡單的示例,即使App未運行,也可以生成Toast:

 private async void button_Click(object sender, RoutedEventArgs e) { string myTaskName = "MyBackgroundClass"; // check if task is already registered foreach (var cur in BackgroundTaskRegistration.AllTasks) if (cur.Value.Name == myTaskName) { await (new MessageDialog("Task already registered")).ShowAsync(); return; } // Windows Phone app must call this to use trigger types (see MSDN) await BackgroundExecutionManager.RequestAccessAsync(); // register a new task BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder { Name = "MyBackgroundClass", TaskEntryPoint ="MybackgroundStuff.MyBackgroundClass" }; taskBuilder.SetTrigger(new TimeTrigger(15, true)); BackgroundTaskRegistration myFirstTask = taskBuilder.Register(); 

如果您想了解更多信息,請參閱我的博客: http : //windowsapplife.blogspot.in/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM