2013-09-12 2 views
0

'System.IO.FileNotFoundException' произошло в MyApp.DLL'System.IO.FileNotFoundException'

C# коды следующие. Указатель ошибки указывал на LockScreen.SetImageUri (uri) «это следующий оператор, который будет выполнен».

public partial class MainPage : PhoneApplicationPage 
{ 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 


    private async void SetBackground1(object sender, RoutedEventArgs e) 
    { 
     if (await LockScreenManager.RequestAccessAsync() == LockScreenRequestResult.Granted) 
     { 
      var uri = new Uri("ms-appx:///Assets/1.jpg", UriKind.Absolute); 
      LockScreen.SetImageUri(uri); 
     } 
     else 
     { 
      MessageBox.Show("You said no, so I can't update your background."); 
     } 
    } 
} 
+4

Похоже, что 'ms-appx: /// Assets/1.jpg' не существует. Вы уверены, что можете получить доступ к этому файлу? – Otiel

+0

Убедитесь, что путь правильный. – iamCR

+0

Вы установили свойство BuildAction изображения в Content? – anderZubi

ответ

1

Пожалуйста, убедитесь, что изображение существует в указанном месте, и это Build Action свойство установлено в Content:

enter image description here

+0

Я проверил изображение в указанном месте, и для свойства Build Action установлено значение Content. –

+0

Я копирую и вставляю код, и он работает для меня с этой конфигурацией. – anderZubi

+0

Таким образом, ошибка связана не с кодами, то почему это исключение показано? –

2

Сохранить изображение в изолированном хранилище вместо папки проекта. Затем извлечь изображение из изолированного хранилища, когда вы хотите, как это,

var lockimageuri = new Uri("ms-appdata:///Local/" + "lockimage0.jpg", UriKind.Absolute); 
    LockScreen.SetImageUri(lockimageuri); 

Здесь locimage0.jpg изображение, которое представляет в изолированном хранилище.

Вот код для сохранения изображения в изолированном хранилище.

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
      string filePath = "lockimage0.jpg"; 
      if (store.FileExists(filePath)) 
      { 
       store.DeleteFile(filePath); 
      } 
      IsolatedStorageFileStream fileStream = store.CreateFile(filePath); 
      wbm.SaveJpeg(fileStream, wbm.PixelWidth, wbm.PixelHeight, 0, 100); 
      fileStream.Close(); 
    } 

Также вы можете использовать этот метод для чтения локального изображения из папки проекта.

private WriteableBitmap ReadLocalImage(string Uri) 
    { 
     StreamResourceInfo sri = null; 
     Uri uri = new Uri(Uri, UriKind.Relative); 
     sri = Application.GetResourceStream(uri); 
     BitmapImage bitmap = new BitmapImage(); 
     bitmap.CreateOptions = BitmapCreateOptions.None; 
     bitmap.SetSource(sri.Stream); 
     WriteableBitmap wb = new WriteableBitmap(bitmap); 
     return wb; 

    } 

Вот как я применил пользовательский экран блокировки в своем приложении.

Кроме того, убедитесь, что вы обновили файл манифеста

<Extensions> 
    <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> 
</Extensions> 

Я также попытался с изображением в локальной папке проекта, что также работает хорошо для меня. Вот код, который я пробовал.

private async void SetLockScreen() 
{ 
      //Check to see if the app is currently the lock screen provider 
      if (!LockScreenManager.IsProvidedByCurrentApplication) 
      { 
       //Request to be lock screen provider 
       await LockScreenManager.RequestAccessAsync(); 
      } 

      //Check to see if the app is currently the lock screen provider 
      if (LockScreenManager.IsProvidedByCurrentApplication) 
      { 
       //Set the image to the lock screen image 
       Uri imageUri = new Uri("ms-appx:///Images/lockscreen.png", UriKind.RelativeOrAbsolute); 
       LockScreen.SetImageUri(imageUri); 
      } 
    } 
Смежные вопросы