我的C#线程代码似乎有问题......
我们有Report
个对象知道如何ExportToPdf()
。如果我在没有任何线程的情况下运行代码,一切都很好。我们要做的是运行一系列报告(仍然是一次一个),但是如果需要的时间超过一段时间,则可以切断报告导出(在我的简单示例中硬编码为100 ms) )。
public RunningMethod()
{
Report myReport = new Report();
for (int i = 0; i < 10; i++)
{
Thread reportThread = new Thread(() => DoBackgroundJob(myReport, "test" + i.ToString()));
reportThread.Start();
bool finished = reportThread.Join(TimeSpan.FromMilliseconds(100));
if (!finished)
{
reportThread.Abort();
}
}
}
protected void DoBackgroundJob(Report myReport, string reportFilename)
{
report.ExportToPdf(@"C:\" + reportFilename + ".pdf");
}
现在,我知道Thread.Abort不赞成,但我并不是100%肯定我们这里有另一种选择(ExportToPdf方法不是我们的......它是第三方方法)。我有一个问题向他们开放,看看是否有办法解决这个问题。但是,如果没有,我的问题是:
当我运行此代码时,我在导出方法中出现错误,抱怨“线程正在中止”。这对我来说很有意义我只是中止了线程,所以它就要死了。那么使用某种try-catch包围DoBackgroundJob内容的正确解决方案是什么,只是吞下错误?我觉得这只是变得更加丑陋和丑陋。有没有更好的方法来解决这个问题?