2

我想将一些内容写入本地文件,然后在文本块中表示它。我有两种方法,CreateFile 和 Output,第一种方法使用 WriteTextAsync 方法将内容写入文件,第二种方法使用 ReadTextAsync 方法读取内容。我一一调用了这两种方法,比如

CreateFile(data);
Output(file);

file 是一个全局变量,CreateFile 方法将“数据”写入文件,Output 方法输出它的内容。不幸的是,它并不总是有效,有时会出现“对象引用未设置为对象”的异常,经过研究,我发现有时文件为空,我认为可能是由于执行了输出方法,但文件创建未完成。所以如果我添加一个断点,它总是有效的。任何人都可以帮助我在文件创建完成后如何让输出方法执行?

谢谢

4

2 回答 2

9

原因之一可能是文件尚未创建,当第二种方法尝试读取它时:

图1

因此,第二种方法必须等待第一种方法完成

图 2

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

其中之一是使用任务并行库中的任务类及其等待方法

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

另一个,例如ManualResetEvent 类

ManualResetEvent允许线程通过信号相互通信。通常,这种通信涉及一个线程必须在其他线程可以继续之前完成的任务。

其他一些相关链接:

于 2012-10-29T04:10:30.617 回答
1

由于您的方法调用异步方法,一个简单的解决方法是像这样调用您的方法:

await CreateFile(data);   // This waits for the method to complete before continuing.  
Output(file);
于 2012-10-29T04:31:18.097 回答