Я сделал все, что нужно для получения доступа к файлам, расположенным на SD-карте моего устройства IOT (DragonBoard 410c).
У меня есть все ассоциации FileTypeAssociations
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<Capability Name="internetClientServer" />
<uap:Capability Name="userAccountInformation" />
<uap:Capability Name="removableStorage" />
<uap:Capability Name="enterpriseAuthentication" />
Я МОГУ видеть и перебирать файлы на SD-карте
StorageFolder removablelDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdCard = (await removablelDevices.GetFoldersAsync()).FirstOrDefault();
var files = await nm.GetFilesAsync();
foreach (var file in files)
{
DebugText(file.Path);
//E:\Photo1.jpg
//E:\Photo2.jpg
}
Я устанавливаю ImageSource из ImageBrush фона для этих изображений в слайд-шоу.
private ImageSource _CurrentPicture;
public ImageSource CurrentPicture { get { return _CurrentPicture; } set { Set(ref _CurrentPicture, value); } }
<ImageBrush Stretch="UniformToFill" ImageSource="{x:Bind ViewModel.CurrentPicture, Mode=OneWay}"/>
Изображения не отображаются (E: \ Photo1.jpg и т. Д.)
Я могу перебирать файловые ресурсы на локальном сервере в режиме разработки, поэтому в этом сценарии мои фотографии отображаются на моем фоне.
Я обновляю фон с помощью DispatchTimer.
Теперь, когда доступ к файлам асинхронный, я столкнулся с асинхронным адом.
public void TimerSetup()
{
SlideShowTimer = new DispatcherTimer();
SlideShowTimer.Tick += SlideShowTimer_Tick;
SlideShowTimer.Interval = new TimeSpan(0, 0, SlideShowChangeIntervalSeconds);
SlideShowTimer.Start();
}
void SlideShowTimer_Tick(object sender, object e)
{
ChangeBackground();
}
public async Task ChangeBackground()
{
var nextIndex = RandomGenerator.Next(0, SlideShowFiles.Length);
var fileName = SlideShowFiles[nextIndex];
var file = await StorageFile.GetFileFromPathAsync(fileName);
var stream = await file.OpenAsync(FileAccessMode.Read);
await CurPicImage.SetSourceAsync(stream);
await Task.CompletedTask;
}