c#在计时器

时间:2016-03-28 09:57:41

标签: c# file interrupt streamwriter

我需要编写一个位于远程目录中的文件。我需要创建一个日志应用程序:每次发生错误时,我都想访问这个远程文件并写一行。但如果远程目录不可用,我不在乎。我只是希望主应用程序继续运行。

通常访问此远程目录需要1秒钟。如果WriteLine方法花费的时间超过1秒,我想阻止它。

我尝试使用try catch但是整个应用程序被阻止了很长时间。我需要尽快打断这种尝试。

这是用于在txt文件上写入的主要代码:

try 
{           
    string TargetFile = "F:\\file.txt";
    using (StreamWriter sw = File.AppendText(TargetFile))
    {
        sw.WriteLine("LOG: an error occured\n");
        sw.Close();
    }
}
catch (Exception)
{

    throw;
}

我无法弄清楚如何解决这个问题。也许通过在单独的线程内运行写操作?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

1)不要在内部捕获块

2)使用托管线程来加速流程并提高性能

如果您使用的是.Net 4.5及以上,我在下面写的块将有所帮助。只需在程序中添加它

即可

使用System.Threading.Tasks;

var errorWriter =  Task.Run(() => 

        {
            try
            {
                string TargetFile = "F:\\file.txt";
                using (StreamWriter sw = File.AppendText(TargetFile))
                {
                    sw.WriteLine("LOG: an error occured\n");
                    sw.Close();
                    return "success";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;

              //  throw; _________________ don't throw here 
            }

        });