2016-08-12 64 views
0

我已經編碼了下一個代碼: private async void WriteData() var removableDevices = KnownFolders.RemovableDevices; var externalDrives = await removableDevices.GetFoldersAsync(); var drive0 = externalDrives [0];保存文件Windows Iot Core jpg格式

  var testFolder = await drive0.CreateFolderAsync("test"); 
      var testFile = await testFolder.CreateFileAsync("test.jpg"); 

      var byteArray = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; 
      using (var sourceStream = new MemoryStream(byteArray).AsRandomAccessStream()) 
      { 
       using (var destinationStream = (await testFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0)) 
       { 
        await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream); 
       } 

      } 

     } 

     private async void _timer_Tick(object sender, object e) 
     { 
      DhtReading reading = new DhtReading(); 
      int val = this.TotalAttempts; 
      this.TotalAttempts++; 

      reading = await _dht.GetReadingAsync().AsTask(); 

      _retryCount.Add(reading.RetryCount); 
      this.OnPropertyChanged(nameof(AverageRetriesDisplay)); 
      this.OnPropertyChanged(nameof(TotalAttempts)); 
      this.OnPropertyChanged(nameof(PercentSuccess)); 
     if (reading.IsValid) 
     { 
      this.TotalSuccess++; 
      this.Temperature = Convert.ToSingle(reading.Temperature); 
      this.Humidity = Convert.ToSingle(reading.Humidity); 
      this.LastUpdated = DateTimeOffset.Now; 
      this.OnPropertyChanged(nameof(SuccessRate)); 

      this.WriteData(); 


     } 

     this.OnPropertyChanged(nameof(LastUpdatedDisplay)); 

    } 

我的代碼凍結,我想知道我怎麼能保存在檔案中的溼度和溫度值, 這是拯救這個應用程序的最佳方式?

有人可以幫我嗎?

+0

我檢查'寫數據()'對樹莓派2.我寫信給test.jpg放在成功。問題可能出現在_timer_Tick()中。哪一行導致你的代碼被凍結?你用什麼設備? –

+0

我使用Raspberry Pi 3,Windows Iot核心操作系統版本爲10.0.14393.0,您是否看到過我的代碼中有任何錯誤? –

+0

該錯誤是在 #ENDIF 的#if DEBUG &&!DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION UnhandledException + =(發件人,E)=> { 如果(全球:: System.Diagnostics.Debugger.IsAttached)全局:: System.Diagnostics程序。 Debugger.Break(); // THIS LINE }; #endif } } } –

回答

0

因爲第一次運行代碼後,「test」文件夾和「test.jpg」已經創建,所以當您再次運行代碼時,您可能會收到此異常。你可以試試這個:

var testFolder = await drive0.GetFolderAsync("test"); 
var testFile = await testFolder.GetFileAsync("test.jpg"); 

注取而代之的

var testFolder = await drive0.CreateFolderAsync("test"); 
var testFile = await testFolder.CreateFileAsync("test.jpg"); 

:在這裏,我到一個外部SD卡上的test.jpg放在。如果設備中沒有SD卡,代碼也會遇到此異常。

+0

麗塔,我改變它,但錯誤是一樣的。 –

+0

@FelipeFerreiraMendes您是否成功創建或獲得了test.jpg?在哪兒?您可以逐行調試您的代碼,並找出代碼運行到異常的哪一行。 –

0

在類的頂部試試這個,MyClass是容器類

StorageFolder testFolder; 
public MyClass() 
{ 
    var removableDevices = KnownFolders.RemovableDevices; 
    var externalDrives = await removableDevices.GetFoldersAsync(); 
    var drive0 = externalDrives[0]; 
    testFolder = await drive0.CreateFolderAsync("test"); 
    await testFolder.CreateFileAsync("test.jpg"); 
} 

而且,在你的WriteData方法,你只說

var testFile = await testFolder.GetFolderAsync("test.jpg"); 

觀察

的名字
  • WriteData獲得在removableDevices.GetFoldersAsync()
  • 慢當您使用一個定時器,你必須保持Tick事件快速和資源自由地