17

await外部アプリケーションによってファイルを作成するための最もクリーンな方法は何ですか?

    async Task doSomethingWithFile(string filepath)
    {
        // 1. await for path exists
        // 2. Do something with file
    }
4

4 に答える 4

-4

これは私がそれを行う方法です:

await Task.Run(() => {while(!File.Exists(@"yourpath.extension")){} return;});
//do all the processing

メソッドにパッケージ化することもできます。

public static Task WaitForFileAsync(string path)
{
    if (File.Exists(path)) return Task.FromResult<object>(null);
    var tcs = new TaskCompletionSource<object>();
    FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(path));
    watcher.Created += (s, e) => 
    { 
        if (e.FullPath.Equals(path))
        { 
            tcs.TrySetResult(null);
            if (watcher != null)
            {
                watcher.EnableRaisingEvents = false;
                watcher.Dispose();
            }
        } 
    };
    watcher.Renamed += (s, e) =>
    {
        if (e.FullPath.Equals(path))
        {
            tcs.TrySetResult(null);
            if (watcher != null)
            {
                watcher.EnableRaisingEvents = false;
                watcher.Dispose();
            }
        }
    };
    watcher.EnableRaisingEvents = true;
    return tcs.Task;
}

そして、これを次のように使用します。

await WaitForFileAsync("yourpath.extension");
//do all the processing
于 2013-07-01T15:59:09.077 に答える