2016-08-12 65 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事件快速和资源自由地