set;
}
+ public event ProgressEventHandler LoadProgress;
+
/// <summary>
/// ルーラーやキャレット・行番号などの表示すべきものが変化した場合に呼び出される。ドキュメントの内容が変化した通知を受け取り場合はUpdateを使用してください
/// </summary>
/// 読み取り操作は別スレッドで行われます。
/// また、非同期操作中はこのメソッドを実行することはできません。
/// </remarks>
- internal async Task LoadAsync(IStreamReader fs, CancellationTokenSource tokenSource = null)
+ public async Task LoadAsync(TextReader fs, CancellationTokenSource tokenSource = null)
{
- if (fs.IsEnd())
+ if (fs.Peek() == -1)
return;
+ if (this.LoadProgress != null)
+ this.LoadProgress(this, new ProgressEventArgs(ProgressState.Start));
+
try
{
this.Clear();
this.FireUpdateEvent = true;
//これ以降の操作にだけダーティフラグを適用しないとおかしなことになる
this.LayoutLines.IsFrozneDirtyFlag = false;
+ if (this.LoadProgress != null)
+ this.LoadProgress(this, new ProgressEventArgs(ProgressState.Complete));
}
}
/// <param name="tokenSource">キャンセルトークン</param>
/// <returns>Taskオブジェクト</returns>
/// <remarks>非同期操作中はこのメソッドを実行することはできません</remarks>
- internal async Task SaveAsync(IStreamWriter fs, CancellationTokenSource tokenSource = null)
+ public async Task SaveAsync(TextWriter fs, CancellationTokenSource tokenSource = null)
{
try
{
}
/// <summary>
- /// IStreamReaderインターフェイス
- /// </summary>
- public interface IStreamReader
- {
- /// <summary>
- /// ストリームが空かどうかを返す
- /// </summary>
- bool IsEnd();
-
- /// <summary>
- /// ストリームから行を読み取った物を返す。LoadAsyncを呼び出す場合は必ず実装してください
- /// </summary>
- Task<string> ReadLineAsync();
- /// <summary>
- /// ストリームから指定した文字数だけ読み取る
- /// </summary>
- /// <param name="buffer">書き込み先バッファー</param>
- /// <param name="index">書き込み先バッファーのインデックス</param>
- /// <param name="count">読み取る文字数</param>
- /// <returns>読み取った文字数</returns>
- Task<int> ReadAsync(char[] buffer, int index, int count);
- }
-
- /// <summary>
- /// IStreamWriter
- /// </summary>
- public interface IStreamWriter
- {
- /// <summary>
- /// ストリームに書き込む。SaveAsyncを呼び出す場合は必ず実装してください
- /// </summary>
- Task WriteAsync(string str);
-
- /// <summary>
- /// 書き込む際に使用する改行コード
- /// </summary>
- string NewLine
- {
- get;
- set;
- }
- }
-
- /// <summary>
/// 検索結果を表す
/// </summary>
public class SearchResult