另一个进程使用的文件-StreamWriter

时间:2019-02-22 13:07:52

标签: c# asynchronous streamwriter

我已经检查了所有其他解决方案,但没有任何效果。 我正在从不同的按钮事件中调用异步日志记录方法。

private async void button1_Click(object sender, EventArgs e)
{
    await Task.Run(() => LoggerTest());
}

private async void button2_Click(object sender, EventArgs e)
{
    await Task.Run(() => LoggerTest());
}

private async void LoggerTest()
{
    for (int i = 0; i < 10000; i++)
    {
        Logger.Log(string.Format("Counter: {0}", i));
        Thread.Sleep(10);
    }
}

日志方法使用 StreamWriter

private void Log(string log)
{
    if (!IsFileLocked(fullPath))
    {
        using (StreamWriter file = new StreamWriter(fullPath, append: true))
        {
            file.WriteLine(log);
            file.Close(); // I know this is unnecessary in the using block
        }
    }
}

private bool IsFileLocked(string file)
{
    try
    {
        using (var stream = File.OpenRead(file))
            return false;
    }
    catch (IOException)
    {
        return true;
    }
}

当我单击button1和button2时,捕获了以下异常:

  

System.IO.IOException :“该进程无法访问文件'C:.. \ x.txt',因为它正在被另一个进程使用。'

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

D <- c(1, 7, 9)
E <- c(2, 4, 6, 10, 12, 13)

lock关键字将锁定流编写器,直到当前编写器进程完成