如何在不引起问题的情况下中止线程

时间:2016-04-12 20:17:07

标签: c# multithreading

我的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内容的正确解决方案是什么,只是吞下错误?我觉得这只是变得更加丑陋和丑陋。有没有更好的方法来解决这个问题?

0 个答案:

没有答案