2012-10-29 138 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。 –