2012-10-29 97 views
2

我想写一些内容到本地文件,然后代表它在一个文本块。我有两种方法,的CreateFile和输出,所述第一种方法使用WriteTextAsync方法写入到内容文件,并且所述第二方法使用ReadTextAsync方法来读取内容。我称为两种方法逐个像写作和阅读文件异步

CreateFile(data); 
Output(file); 

文件是一个全局变量,的CreateFile方法将写入“数据”到文件和输出方法输出的它的内容。 不幸的是,它并不总是工作,有时,我除外,它说:“对象未设置为一个对象”,研究后,我发现有时,该文件是空的,我认为它可以通过输出方法是执行造成的,而是文件创建不完成。所以如果我添加一个断点,它总是有效的。任何人都可以帮助我如何让文件创建完成后执行Output方法?

感谢

回答

9

其中一个原因可能是该文件尚未创建,当第二方法试图来阅读:

Diagram 1

因此,第二种方法有到等待第一种方法完成

Diagram 2

有几种方法来实现这一目标。

其中之一将被使用从Task Parallel LibraryTask Class及其Wait Method

var task = new Task(() => CreateFile(data)); 
task.Wait(); 

另一种,例如,ManualResetEvent Class

ManualResetEvent的允许线程通过信令与彼此通信。通常,此通信涉及一个线程在其他线程可以继续之前必须完成的任务。

其他一些相关链接:

+0

+1非常详细的解答。 – 3aw5TZetdf

+0

@MatthewRz感谢马修。 – maximpa

+0

完美回复! – James

1

因为你的方法调用异步方法,一个简单的解决方法是调用你的方法,如下所示:

await CreateFile(data); // This waits for the method to complete before continuing. 
Output(file); 
+0

@MatthewRz:'windows-8'标签暗示C#5.0。 –