簡體   English   中英

MonoTouch File.ReadAllText在內部FileStream.Dispose()上拋出異常

[英]MonoTouch File.ReadAllText throws exception on internal FileStream.Dispose()

以下代碼似乎偶爾會產生這種堆棧跟蹤。 在內部FileStream對象上調用dispose方法時,它看起來是在框架內發生的嗎? 對我來說似乎是一個錯誤,任何想法?

var previousVersion = long.Parse(File.ReadAllText(Paths.VersionFile));

堆棧跟蹤:

 System.IO.IOException: Invalid parameter
      at System.IO.FileStream.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 
      at System.IO.Stream.Close () [0x00000] in <filename unknown>:0 
      at System.IO.StreamReader.Dispose (Boolean disposing) [0x00000] in <filename unknown>:0 
      at System.IO.TextReader.Dispose () [0x00000] in <filename unknown>:0 
      at System.IO.File.ReadAllText (System.String path) [0x00000] in <filename unknown>:0 
      at CatalystHD.Shared.BaseLoginController.CheckIfFirstRunThisVersion () [0x00000] in <filename unknown>:0 
      at CatalystHD.Shared.BaseLoginController.ViewDidLoad () [0x00000] in <filename unknown>:0 
      at MonoTouch.UIKit.UIViewController.get_View () [0x00000] in <filename unknown>:0 
      at CatalystHD.IPad.RootViewController.AnimateTo (MonoTouch.UIKit.UIViewController aController, UIViewAnimationTransition transition) [0x00000] in <filename unknown>:0 
      at CatalystHD.IPad.RootViewController.Logout (Boolean timeout) [0x00000] in <filename unknown>:0 
      at CatalystHD.IPad.NotebookSelectionController.logoutButton_Clicked (System.Object sender, System.EventArgs e) [0x00000] in <filename unknown>:0 
      at MonoTouch.UIKit.UIBarButtonItem Callback.Call (MonoTouch.Foundation.NSObject sender) [0x00000] in <filename unknown>:0 
      at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in <filename unknown>:0 
      at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unknown>:0 
      at CatalystHD.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0 

編輯 VersionFile路徑是這樣抓取的:

public static string VersionFile {
    get {
        var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        return Path.Combine(path, "version.dat");
    }
}

如果我不得不猜測,我認為你可能會因為在ReadAllText調用中處理引擎蓋下的FileStream期間發生的隱式Flush()而遇到競爭狀態。

(警告:不在單聲道源前面,因此無法確認確切的行為)

有可能:

  • 你正在更換/重新開放/等。 另一個線程中的文件路徑相同?
  • 在另一個線程之后或之后立即刪除該路徑?
  • 否則失去對檢查路徑的訪問權限? (文件共享卸載?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM