DispatcherTimer无法在任务内部工作吗?

时间:2014-08-13 13:59:56

标签: c# wpf task-parallel-library task dispatchertimer

好的,这可以如下工作

public MainWindow()
{
    CheckCrawlURLs.func_StartCrawlingWaitingUrls();    
}

然而,这不适用于

public MainWindow()
{                 
    Task.Factory.StartNew(() =>
    {
        CheckCrawlURLs.func_StartCrawlingWaitingUrls();
    });
}

以下是两个例子中执行的类

public static class CheckCrawlURLs
{
    public static void func_StartCrawlingWaitingUrls()
    {
        PublicStaticFunctions.AddMsgToEvents("Checking waiting crawling urls process started");
        System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
        dispatcherTimer.Tick += new EventHandler(func_CheckWaitingUrls);
        dispatcherTimer.Interval = new TimeSpan(0, 0, 5);
        dispatcherTimer.Start();
    }

    private static void func_CheckWaitingUrls(object sender, EventArgs e)
    {
        PublicStaticFunctions.AddMsgToMoreCommonEvents("Checking waiting to crawl urls...");
        List<string> lstStartCrawling = CrawlURLDB.func_ReturnNextCrawlLinks();
        PublicStaticFunctions.AddMsgToMoreCommonEvents("Number of links to start crawlin: " + lstStartCrawling.Count);
    }
}

所以我的问题是这里的逻辑是什么?

在第二个任务工厂启动时,func_CheckWaitingUrls没有打勾。

我应该使用哪一个?

1 个答案:

答案 0 :(得分:3)

顾名思义,DispatcherTimer基于WPF调度程序。这显然只适用于GUI线程。

改为查看System.Threading.Timer - 或者在新线程上启动计时器回调。