第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HttpClient 未在最小化的 UWP 應(yīng)用程序中執(zhí)行 GetAsync

HttpClient 未在最小化的 UWP 應(yīng)用程序中執(zhí)行 GetAsync

C#
人到中年有點甜 2021-11-21 10:06:56
我正在做一個播放幾個視頻的項目。為了能夠播放這些視頻,我需要在應(yīng)用程序通過HttpClientfrom請求時獲取它們的數(shù)據(jù)System.Net.Http。一切正常,當(dāng)應(yīng)用程序處于前臺時,UWP 應(yīng)用程序會從 Internet 下載所需的信息。一旦應(yīng)用程序離開前臺并被用戶最小化HttpClient,無論是來自命名空間System.Net.Http還是Windows.Web.Http命名空間,都不起作用。我什至試圖在那里設(shè)置一個斷點,一旦我繼續(xù)前進HttpClient就不會響應(yīng)該await client.GetAsync()方法并停留在那里而不返回任何結(jié)果,除非您再次激活該應(yīng)用程序然后它返回任何值。我無法使用,BackgroundTasks因為他們需要,Triggers但我需要按需訪問數(shù)據(jù)。我也讀過這篇文章,描述了請求,ExtendedExecutionState但結(jié)果還是一樣。當(dāng)應(yīng)用程序收到播放項目列表的請求時,我會請求此狀態(tài)。即使在獲得結(jié)果為 之后Allowed,HttpClient也具有與上述相同的行為。有沒有什么方法可以在請求時執(zhí)行互聯(lián)網(wǎng)相關(guān)查詢并獲取一些信息?我執(zhí)行從互聯(lián)網(wǎng)訪問數(shù)據(jù)的代碼是:public static async Task<string> GetResponseDataFromAPI(string apiRequestUrl, CancellationTokenSource cts = default){    cts = cts ?? new CancellationTokenSource(TimeSpan.FromSeconds(20));    try    {        var responseData = await AuthRequestHelper.globalHttpClient.GetAsync(apiRequestUrl, cts.Token);        var result = await responseData.Content.ReadAsStringAsync();        return result;    }    catch (Exception ex)    {        INotifyHelper.iNotifyObject.IsVideoLoading = false;        INotifyHelper.iNotifyObject.IsDataLoading = false;        // show error        return "{ \"error\": {\"code\": " + $"\"{ex.HResult}\", \"message\": \"{ex.Message}\"" + "} }";    }}然后分析返回的值以從中獲取所需的數(shù)據(jù)。執(zhí)行請求的代碼ExtendedExecutionSession是:public static async void RequestBackgroundExtendedExecution(){    using (var session = new ExtendedExecutionSession())    {        session.Reason = ExtendedExecutionReason.Unspecified;        session.Description = "Background Playlist Playback";        session.Revoked += Session_Revoked;        if (await session.RequestExtensionAsync() is ExtendedExecutionResult result)        {            if (result == ExtendedExecutionResult.Denied)            {                // show user that background playlist playback will not be possible            }        }    }}在最小化狀態(tài)下,是否可以執(zhí)行任何操作來執(zhí)行請求的操作?指向正確方向的一點幫助將不勝感激。謝謝
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經(jīng)驗 獲得超8個贊

的BackgroundTransfer類專門在后臺下載數(shù)據(jù)設(shè)計,即使應(yīng)用程序已被暫?;蜿P(guān)閉。

HttpClient 更適合快速完成的非常短的下載。對于像視頻這樣的冗長下載,請使用Windows.Networking.BackgroundTransfer.BackgroundDownloader。如果您需要在下載完成時處理文件,您可以使用該完成作為后臺任務(wù)的觸發(fā)器。

有關(guān)概述和操作方法,請參閱提供的文檔鏈接。https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTransfer 上有一個完整的示例


查看完整回答
反對 回復(fù) 2021-11-21
?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

所以我決定在這里寫下我自己的答案,因為我不確定其他人是否會解決這個問題。我懷疑的一件事是我最近將 C# 語言更新到了 v7.3,因為 VS 2017 在編寫一些代碼時是這樣說的。也許問題與此有關(guān),但到目前為止我的解決方案在最小化狀態(tài)下工作。


我還想在此聲明,我BackgroundTask首先實施以ApplicationTrigger在需要時觸發(fā)該過程來克服這個問題,但老實說這是一種黑客攻擊。看一下代碼:


public static async Task<string> GetBackgroundTaskReturnValue(string apiRequestUrl)

{

        StaticItemsHelper.IsBackgroundPlaylistTaskRunning = true;

        if (StaticItemsHelper.IsBackgroundPlaylistTaskRunning)

        {

            for (int seconds = 0; seconds < 20;)

            {

                if (!StaticItemsHelper.IsBackgroundPlaylistTaskRunning)

                {

                    break;

                }

                else

                {

                    Task.Delay(1000).Wait();

                }

            }

        }

        var request = BackgroundTaskHelper.BackgroundPlaylistTrigger.RequestAsync().GetResults();

        if (request == Windows.ApplicationModel.Background.ApplicationTriggerResult.Allowed)

        {

            SettingsHelper.localSettings.Values[SettingsHelper.BackgroundPlaylistPlaybackURLKey] = apiRequestUrl;

            SettingsHelper.localSettings.Values[SettingsHelper.BackgroundPlaylistPlaybackTokenKey] = StaticItemsHelper.CurrentUserAccessToken;

            if (SettingsHelper.tempFolder.TryGetItemAsync(SettingsHelper.BackgroundPlaylistPlaybackReturnKey).GetResults() is StorageFile file)

            {

                await file.DeleteAsync();

            }

            for (int seconds = 0; seconds < 30;)

            {

                if (SettingsHelper.tempFolder.TryGetItemAsync(SettingsHelper.BackgroundPlaylistPlaybackReturnKey).GetResults() is StorageFile _rfile)

                {

                    var _returnVal = FileIO.ReadTextAsync(_rfile).GetResults();

                    if (!string.IsNullOrEmpty(_returnVal.ToString()))

                    {

                        await _rfile.DeleteAsync();

                        SettingsHelper.localSettings.Values.Remove(SettingsHelper.BackgroundPlaylistPlaybackTokenKey);

                        SettingsHelper.localSettings.Values.Remove(SettingsHelper.BackgroundPlaylistPlaybackURLKey);

                        StaticItemsHelper.IsBackgroundPlaylistTaskRunning = false;

                        return _returnVal;

                    }

                }

                Task.Delay(2000).Wait();

                seconds += 2;

            }

        }

        else if (request == Windows.ApplicationModel.Background.ApplicationTriggerResult.CurrentlyRunning)

        {

            for (int seconds = 0; seconds < 30;)

            {

                Task.Delay(2000).Wait();

                seconds += 2;

                request = BackgroundTaskHelper.BackgroundPlaylistTrigger.RequestAsync().GetResults();

                if (request == Windows.ApplicationModel.Background.ApplicationTriggerResult.Allowed)

                {

                    return GetBackgroundTaskReturnValue(apiRequestUrl).Result;

                }

            }

        }

        if (SettingsHelper.tempFolder.TryGetItemAsync(SettingsHelper.BackgroundPlaylistPlaybackReturnKey).GetResults() is StorageFile _file)

        {

            await _file.DeleteAsync();

        }

        SettingsHelper.localSettings.Values.Remove(SettingsHelper.BackgroundPlaylistPlaybackTokenKey);

        SettingsHelper.localSettings.Values.Remove(SettingsHelper.BackgroundPlaylistPlaybackURLKey);

        StaticItemsHelper.IsBackgroundPlaylistTaskRunning = false;

        return "{ \"error\": {\"code\": \"NetworkError\", \"message\": \"Server returned nothing.\"} }";

}

實際解決方案: 但是它也沒有按我預(yù)期的那樣工作,所以我決定放棄它并使用以下代碼代替。(將此與問題進行比較)


public static async Task<string> GetResponseDataFromAPI(string apiRequestUrl, CancellationTokenSource cts = default)

{

        cts = cts ?? new CancellationTokenSource(TimeSpan.FromSeconds(20));

        try

        {

            if (StaticItemsHelper.IsAppInBackground)

            {

                //return await ViewHelper.GetBackgroundTaskReturnValue(apiRequestUrl);

                var responseData = AuthRequestHelper.globalHttpClient.GetAsync(apiRequestUrl, cts.Token).Result;

                var result = responseData.Content.ReadAsStringAsync().Result;

                return result;

            }

            else

            {

                var responseData = await AuthRequestHelper.globalHttpClient.GetAsync(apiRequestUrl, cts.Token);

                var result = await responseData.Content.ReadAsStringAsync();

                return result;

            }

        }

        catch (Exception ex)

        {

            INotifyHelper.iNotifyObject.IsDataLoading = false;

            // show error

            return "{ \"error\": {\"code\": " + $"\"{ex.HResult}\", \"message\": \"{ex.Message}\"" + "} }";

        }

}

希望這對其他人有所幫助。


查看完整回答
反對 回復(fù) 2021-11-21
  • 2 回答
  • 0 關(guān)注
  • 252 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號