2012-03-06 66 views
6

以下代码似乎偶尔会产生此堆栈跟踪。它看起来像在内部FileStream对象上调用dispose方法时发生在框架内?看起来像一个错误,对我来说,有什么想法?MonoTouch File.ReadAllText抛出内部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"); 
    } 
} 
+0

什么是传递与'Paths.VersionFile'? – 2012-03-06 18:29:59

+0

@ DanielA.White查看编辑 – 2012-03-06 18:35:07

+1

我们需要更多关于您应用程序的上下文,例如,我可以在没有任何问题的情况下在循环中运行代码10000x,因为其他内容必须有所不同。像什么时候该文件创建,更新,删除?由任何不同的线程?它发生在设备,模拟器上吗? ...和所有版本号。 – poupou 2012-03-06 19:16:49

回答

0

如果我猜的话,我想你可能会运行到比赛状态由于隐含Flush()发生在处置发动机罩FileStream在那ReadAllText叫。

(警告:不是在单声道音源前面,所以无法确认确切的行为)

有没有可能是:

  • 您正在更换/重启/等。另一个线程中的文件路径相同?
  • 在其他线程之后立即删除该路径?
  • 否则失去对检查路径的访问权限? (文件共享卸载?)