Skip to content

Commit

Permalink
Windows 10 future version - October 2017 Update
Browse files Browse the repository at this point in the history
  • Loading branch information
oldnewthing committed Oct 5, 2017
2 parents cc3e8a8 + 9a6af21 commit ff8eac9
Show file tree
Hide file tree
Showing 220 changed files with 8,081 additions and 4,678 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ For additional Windows samples, see [Windows on GitHub](http://microsoft.github.
<td><a href="Samples/ContactPicker">Contact picker</a></td>
</tr>
<tr>
<td><a href="Samples/MyPeopleNotifications">My People notifications</a></td>
<td><a href="Samples/UserDataAccountManager">UserDataAccountManager</a></td>
</tr>
</table>
Expand Down
5 changes: 4 additions & 1 deletion Samples/BackgroundTransfer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ For the download scenario, the sample first uses methods on [BackgroundDownloade

For the upload scenario, the sample first uses methods on [BackgroundUploader](http://msdn.microsoft.com/library/windows/apps/br207140) class to enumerate any uploads that were going on in the background while the app was closed. An app should enumerate these uploads when it gets started so it can attach a progress handler to these uploads to track progress and prevent stale uploads. Then other methods on the **BackgroundUploader** and related classes are used to start new uploads. The sample also shows how to set a content header and use a multipart upload.

The sample also shows how to configure and use toast and tile notifications to inform the user when all transfers succeed or when at least one transfer fails.
The sample also showcases several advanced usage scenarios:
- Configuring toast and tile notifications to inform the user when all transfers succeed or when at least one transfer fails.
- Executing a background task when a set of uploads or downloads completes.
- Accessing file content and seeking within that content while a download is still ongoing, effectively altering the order in which remote file data is requested from the server.

**Note** Background transfer is primarily designed for long-term transfer operations for resources like video, music, and large images. For short-term operations involving transfers of smaller resources (i.e. a few KB), the HTTP APIs are recommended. [HttpClient](http://msdn.microsoft.com/library/windows/apps/dn298639) is preferred and can be used in all languages supported by UWP apps. [XHR](http://msdn.microsoft.com/library/windows/apps/br229787) can be used in JavaScript. [IXHR2](http://msdn.microsoft.com/library/windows/apps/hh770550) can be used in C++.

Expand Down
130 changes: 130 additions & 0 deletions Samples/BackgroundTransfer/Server/website/randomAccess.aspx
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
<%@ Page Language="C#" AutoEventWireup="true" Debug="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
private static void GetRange(uint fullContentLengthInBytes, string rangeHeaderValue, out uint offset, out uint lengthInBytes)
{
offset = 0;
lengthInBytes = fullContentLengthInBytes;
if (String.IsNullOrEmpty(rangeHeaderValue))
{
return;
}
Regex rx = new Regex(@"(bytes)\s*=\s*(?<startIndex>\d+)\s*-\s*(?<endIndex>\d+)?", RegexOptions.Compiled | RegexOptions.IgnoreCase);
Match match = rx.Match(rangeHeaderValue);
uint startIndex = 0;
Capture startIndexCapture = match.Groups["startIndex"];
if ((startIndexCapture == null) || (!UInt32.TryParse(startIndexCapture.Value, out startIndex)))
{
return;
}
if (startIndex < 0 || startIndex >= fullContentLengthInBytes)
{
throw new ArgumentException(
"Requested range starting index is negative or goes beyond the file's length");
}
offset = startIndex;
uint endIndex = 0;
Capture endIndexCapture = match.Groups["endIndex"];
if ((endIndexCapture != null) && (UInt32.TryParse(endIndexCapture.Value, out endIndex)))
{
if (endIndex < startIndex)
{
throw new ArgumentException(
"Requested range ending index is less than the starting index");
}
lengthInBytes = Math.Min(endIndex, fullContentLengthInBytes - 1) - offset + 1;
}
else
{
lengthInBytes = fullContentLengthInBytes - offset;
}
}
protected void Page_Load(object sender, EventArgs e)
{
try
{
uint fullContentLengthInBytes = 100000000; // 100 MB
if (Request["length"] != null)
{
fullContentLengthInBytes = UInt32.Parse(Request["length"]);
}
int bytesPerSec = 1000000; // 1 MB/s
if (Request["bytesPerSec"] != null)
{
bytesPerSec = Int32.Parse(Request["bytesPerSec"]);
if (bytesPerSec <= 0)
{
throw new ArgumentException("bytesPerSec cannot be zero or negative");
}
}
uint offset = 0;
uint contentLengthInBytes = fullContentLengthInBytes;
// Check if we have a request for partial content (resume scenarios).
if (Request.Headers["Range"] != null)
{
GetRange(fullContentLengthInBytes, Request.Headers["Range"], out offset, out contentLengthInBytes);
}
if (contentLengthInBytes != fullContentLengthInBytes)
{
Response.StatusCode = 206;
Response.Headers["Content-Range"] = String.Format(System.Globalization.CultureInfo.InvariantCulture,
"bytes {0}-{1}/{2}", offset, offset + contentLengthInBytes - 1, fullContentLengthInBytes);
}
else
{
Response.StatusCode = 200;
}
Response.ContentType = "text/plain";
Response.Headers["Content-Length"] = contentLengthInBytes.ToString(System.Globalization.CultureInfo.InvariantCulture);
Response.Headers["Accept-Ranges"] = "bytes";
Response.Headers["Last-Modified"] = "Thu, 21 Aug 2014 21:34:57 GMT";
Response.Buffer = false;
uint transferLengthInBytes = contentLengthInBytes;
byte[] buffer = Encoding.ASCII.GetBytes(new String('a', bytesPerSec));
while (transferLengthInBytes > 0)
{
System.Threading.Thread.Sleep(1000);
int sendLengthInBytes = (int)Math.Min(transferLengthInBytes, buffer.Length);
Response.OutputStream.Write(buffer, 0, sendLengthInBytes);
transferLengthInBytes -= (uint)sendLengthInBytes;
}
Response.Flush();
}
catch (Exception ex)
{
Trace.Write(ex.Message);
Response.StatusCode = 500;
Response.StatusDescription = ex.Message;
}
Response.End();
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Random Access Download</title>
</head>
<body>
Hello
</body>
</html>
66 changes: 33 additions & 33 deletions Samples/BackgroundTransfer/cpp/BackgroundTransfer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.4
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BackgroundTransfer", "BackgroundTransfer\BackgroundTransfer.vcxproj", "{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BackgroundTransfer", "BackgroundTransfer\BackgroundTransfer.vcxproj", "{7F5E4FCA-F554-576F-86FB-6783A2AE175E}"
ProjectSection(ProjectDependencies) = postProject
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04} = {3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}
{A3E9E82D-507C-5A3C-939A-0587AB580A71} = {A3E9E82D-507C-5A3C-939A-0587AB580A71}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tasks", "Tasks\Tasks.vcxproj", "{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tasks", "Tasks\Tasks.vcxproj", "{A3E9E82D-507C-5A3C-939A-0587AB580A71}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand All @@ -20,36 +20,36 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|ARM.ActiveCfg = Debug|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|ARM.Build.0 = Debug|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|ARM.Deploy.0 = Debug|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x64.ActiveCfg = Debug|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x64.Build.0 = Debug|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x64.Deploy.0 = Debug|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x86.ActiveCfg = Debug|Win32
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x86.Build.0 = Debug|Win32
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Debug|x86.Deploy.0 = Debug|Win32
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|ARM.ActiveCfg = Release|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|ARM.Build.0 = Release|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|ARM.Deploy.0 = Release|ARM
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x64.ActiveCfg = Release|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x64.Build.0 = Release|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x64.Deploy.0 = Release|x64
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x86.ActiveCfg = Release|Win32
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x86.Build.0 = Release|Win32
{D8C2D505-8ACC-5986-A26A-E36FB2D6ABA6}.Release|x86.Deploy.0 = Release|Win32
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|ARM.ActiveCfg = Debug|ARM
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|ARM.Build.0 = Debug|ARM
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|x64.ActiveCfg = Debug|x64
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|x64.Build.0 = Debug|x64
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|x86.ActiveCfg = Debug|Win32
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Debug|x86.Build.0 = Debug|Win32
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|ARM.ActiveCfg = Release|ARM
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|ARM.Build.0 = Release|ARM
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|x64.ActiveCfg = Release|x64
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|x64.Build.0 = Release|x64
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|x86.ActiveCfg = Release|Win32
{3F82F1D2-67A2-5D85-95E2-0C6FD96DCB04}.Release|x86.Build.0 = Release|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|ARM.ActiveCfg = Debug|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|ARM.Build.0 = Debug|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|ARM.Deploy.0 = Debug|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x64.ActiveCfg = Debug|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x64.Build.0 = Debug|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x64.Deploy.0 = Debug|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x86.ActiveCfg = Debug|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x86.Build.0 = Debug|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Debug|x86.Deploy.0 = Debug|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|ARM.ActiveCfg = Release|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|ARM.Build.0 = Release|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|ARM.Deploy.0 = Release|ARM
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x64.ActiveCfg = Release|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x64.Build.0 = Release|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x64.Deploy.0 = Release|x64
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x86.ActiveCfg = Release|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x86.Build.0 = Release|Win32
{7F5E4FCA-F554-576F-86FB-6783A2AE175E}.Release|x86.Deploy.0 = Release|Win32
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|ARM.ActiveCfg = Debug|ARM
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|ARM.Build.0 = Debug|ARM
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|x64.ActiveCfg = Debug|x64
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|x64.Build.0 = Debug|x64
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|x86.ActiveCfg = Debug|Win32
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Debug|x86.Build.0 = Debug|Win32
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|ARM.ActiveCfg = Release|ARM
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|ARM.Build.0 = Release|ARM
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|x64.ActiveCfg = Release|x64
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|x64.Build.0 = Release|x64
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|x86.ActiveCfg = Release|Win32
{A3E9E82D-507C-5A3C-939A-0587AB580A71}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<ProjectGuid>{d8c2d505-8acc-5986-a26a-e36fb2d6aba6}</ProjectGuid>
<ProjectGuid>{7f5e4fca-f554-576f-86fb-6783a2ae175e}</ProjectGuid>
<RootNamespace>SDKTemplate</RootNamespace>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.15063.0</WindowsTargetPlatformMinVersion>
<WindowsTargetPlatformVersion>10.0.16278.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.16278.0</WindowsTargetPlatformMinVersion>
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
Expand Down Expand Up @@ -157,6 +157,9 @@
<ClInclude Include="Scenario4_CompletionGroups.xaml.h">
<DependentUpon>..\..\shared\Scenario4_CompletionGroups.xaml</DependentUpon>
</ClInclude>
<ClInclude Include="Scenario5_RandomAccess.xaml.h">
<DependentUpon>..\..\shared\Scenario5_RandomAccess.xaml</DependentUpon>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="..\..\..\..\SharedContent\xaml\App.xaml">
Expand All @@ -169,6 +172,7 @@
<Page Include="..\..\shared\Scenario2_Upload.xaml" />
<Page Include="..\..\shared\Scenario3_Notifications.xaml" />
<Page Include="..\..\shared\Scenario4_CompletionGroups.xaml" />
<Page Include="..\..\shared\Scenario5_RandomAccess.xaml" />
<Page Include="..\..\..\..\SharedContent\xaml\Styles.xaml">
<Link>Styles\Styles.xaml</Link>
</Page>
Expand Down Expand Up @@ -206,6 +210,9 @@
<ClCompile Include="Scenario4_CompletionGroups.xaml.cpp">
<DependentUpon>..\..\shared\Scenario4_CompletionGroups.xaml</DependentUpon>
</ClCompile>
<ClCompile Include="Scenario5_RandomAccess.xaml.cpp">
<DependentUpon>..\..\shared\Scenario5_RandomAccess.xaml</DependentUpon>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Image Include="..\..\..\..\SharedContent\media\microsoft-sdk.png">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,21 @@
<ClCompile Include="pch.cpp" />
<ClCompile Include="SampleConfiguration.cpp" />
<ClCompile Include="Scenario1_Download.xaml.cpp" />
<ClCompile Include="Scenario4_CompletionGroups.xaml.cpp" />
<ClCompile Include="Scenario2_Upload.xaml.cpp" />
<ClCompile Include="Scenario3_Notifications.xaml.cpp" />
<ClCompile Include="Scenario4_CompletionGroups.xaml.cpp" />
<ClCompile Include="Scenario5_RandomAccess.xaml.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
<ClInclude Include="..\..\..\..\SharedContent\cpp\App.xaml.h" />
<ClInclude Include="..\..\..\..\SharedContent\cpp\MainPage.xaml.h" />
<ClInclude Include="SampleConfiguration.h" />
<ClInclude Include="Scenario1_Download.xaml.h" />
<ClInclude Include="Scenario4_CompletionGroups.xaml.h" />
<ClInclude Include="Scenario2_Upload.xaml.h" />
<ClInclude Include="Scenario3_Notifications.xaml.h" />
<ClInclude Include="Scenario4_CompletionGroups.xaml.h" />
<ClInclude Include="Scenario5_RandomAccess.xaml.h" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest" />
Expand All @@ -44,6 +46,7 @@
<Page Include="..\..\shared\Scenario2_Upload.xaml" />
<Page Include="..\..\shared\Scenario3_Notifications.xaml" />
<Page Include="..\..\shared\Scenario4_CompletionGroups.xaml" />
<Page Include="..\..\shared\Scenario5_RandomAccess.xaml" />
</ItemGroup>
<ItemGroup>
<Image Include="..\..\..\..\SharedContent\media\microsoft-sdk.png">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ using namespace SDKTemplate;

Platform::Array<Scenario>^ MainPage::scenariosInner = ref new Platform::Array<Scenario>
{
{ "File Download", "BackgroundTransfer.Scenario1_Download" },
{ "File Upload", "BackgroundTransfer.Scenario2_Upload" },
{ "Completion Notifications", "BackgroundTransfer.Scenario3_Notifications" },
{ "Completion Groups", "BackgroundTransfer.Scenario4_CompletionGroups" }
{ "File Download", "SDKTemplate.Scenario1_Download" },
{ "File Upload", "SDKTemplate.Scenario2_Upload" },
{ "Completion Notifications", "SDKTemplate.Scenario3_Notifications" },
{ "Completion Groups", "SDKTemplate.Scenario4_CompletionGroups" },
{ "Random Access Downloads", "SDKTemplate.Scenario5_RandomAccess" },

};
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include "pch.h"
#include "Scenario1_Download.xaml.h"

using namespace BackgroundTransfer;
using namespace SDKTemplate;

using namespace Concurrency;
using namespace Platform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "Scenario1_Download.g.h"
#include "MainPage.xaml.h"

namespace BackgroundTransfer
namespace SDKTemplate
{
struct GuidComparer
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include "pch.h"
#include "Scenario2_Upload.xaml.h"

using namespace BackgroundTransfer;
using namespace SDKTemplate;

using namespace Concurrency;
using namespace Platform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "MainPage.xaml.h"
#include "Collection.h"

namespace BackgroundTransfer
namespace SDKTemplate
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include "pch.h"
#include "Scenario3_Notifications.xaml.h"

using namespace BackgroundTransfer;
using namespace SDKTemplate;

using namespace Concurrency;
using namespace Platform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "Scenario3_Notifications.g.h"
#include "MainPage.xaml.h"

namespace BackgroundTransfer
namespace SDKTemplate
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include "pch.h"
#include "Scenario4_CompletionGroups.xaml.h"

using namespace BackgroundTransfer;
using namespace SDKTemplate;

using namespace Concurrency;
using namespace Platform;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include "Scenario4_CompletionGroups.g.h"
#include "MainPage.xaml.h"

namespace BackgroundTransfer
namespace SDKTemplate
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
Expand Down
Loading

0 comments on commit ff8eac9

Please sign in to comment.