C# 尝试给后台工作人员计时,如果需要很长时间就取消

C# 尝试给后台工作人员计时,如果需要很长时间就取消,c#,timer,backgroundworker,C#,Timer,Backgroundworker,我正在解析C#应用程序中的一个网页,我希望能够计算它所需的时间,如果超过一定时间,则取消它。我研究了这两个定时器类,但我仍然是空白。任何帮助都将不胜感激。我希望这能帮到你 using System; using System.ComponentModel; using System.Threading; namespace ConsoleApplication1 { internal class Program { private static Backgrou

我正在解析C#应用程序中的一个网页,我希望能够计算它所需的时间,如果超过一定时间,则取消它。我研究了这两个定时器类,但我仍然是空白。任何帮助都将不胜感激。

我希望这能帮到你

using System;
using System.ComponentModel;
using System.Threading;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static BackgroundWorker worker;
        private static Timer workTimer;

        private static void Main(string[] args)
        {
            Console.WriteLine("Begin work");
            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.WorkerSupportsCancellation = true;
            worker.WorkerReportsProgress = true;
            worker.RunWorkerAsync();

            // Initialize timer
            workTimer = new Timer(Tick, null,  
                                  new TimeSpan(0, 0, 0, 10),  // < Amount of time to wait before the first tick.
                                  new TimeSpan(0, 0, 0, 10)); // < Tick every 10 second interval
            Console.ReadLine();


        }

        private static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            workTimer.Dispose();
            if (e.Cancelled) return;

            // Job done before timer ticked
            Console.WriteLine("Job done");
        }

        private static void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 12; i++)
            {
                // Cancel the worker if cancellation is pending.
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                Console.WriteLine(i);
                Thread.Sleep(1000);                
            }
        }

        private static void Tick(object state)
        {
            // Stop the worker and dispose of the timer.
            Console.WriteLine("Job took too long");
            worker.CancelAsync();
            worker.Dispose();

            workTimer.Dispose();
        }
    }
}
使用系统;
使用系统组件模型;
使用系统线程;
命名空间控制台应用程序1
{
内部课程计划
{
私人静态后台工作人员;
专用静态定时器;
私有静态void Main(字符串[]args)
{
Console.WriteLine(“开始工作”);
worker=新的BackgroundWorker();
worker.DoWork+=worker\u DoWork;
worker.RunWorkerCompleted+=worker\u RunWorkerCompleted;
worker.worker支持扫描单元=true;
worker.WorkerReportsProgress=true;
worker.RunWorkerAsync();
//初始化定时器
工作计时器=新计时器(勾选,空,
新时间跨度(0,0,0,10),//<在第一次滴答声之前等待的时间量。
新的时间跨度(0,0,0,10));//<每10秒间隔勾选一次
Console.ReadLine();
}
私有静态无效工作程序\u RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
workTimer.Dispose();
如果(e.取消)返回;
//计时器滴答响之前完成的作业
Console.WriteLine(“完成工作”);
}
私有静态无效工作线程(对象发送器,工作线程)
{
对于(int i=0;i<12;i++)
{
//如果取消挂起,则取消工作进程。
if(工作人员取消挂起)
{
e、 取消=真;
打破
}
控制台写入线(i);
睡眠(1000);
}
}
私有静态无效勾号(对象状态)
{
//停止工作人员并处理计时器。
WriteLine(“作业花费的时间太长”);
worker.CancelAsync();
worker.Dispose();
workTimer.Dispose();
}
}
}

我希望这能帮到你

using System;
using System.ComponentModel;
using System.Threading;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static BackgroundWorker worker;
        private static Timer workTimer;

        private static void Main(string[] args)
        {
            Console.WriteLine("Begin work");
            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.WorkerSupportsCancellation = true;
            worker.WorkerReportsProgress = true;
            worker.RunWorkerAsync();

            // Initialize timer
            workTimer = new Timer(Tick, null,  
                                  new TimeSpan(0, 0, 0, 10),  // < Amount of time to wait before the first tick.
                                  new TimeSpan(0, 0, 0, 10)); // < Tick every 10 second interval
            Console.ReadLine();


        }

        private static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            workTimer.Dispose();
            if (e.Cancelled) return;

            // Job done before timer ticked
            Console.WriteLine("Job done");
        }

        private static void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 12; i++)
            {
                // Cancel the worker if cancellation is pending.
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                Console.WriteLine(i);
                Thread.Sleep(1000);                
            }
        }

        private static void Tick(object state)
        {
            // Stop the worker and dispose of the timer.
            Console.WriteLine("Job took too long");
            worker.CancelAsync();
            worker.Dispose();

            workTimer.Dispose();
        }
    }
}
使用系统;
使用系统组件模型;
使用系统线程;
命名空间控制台应用程序1
{
内部课程计划
{
私人静态后台工作人员;
专用静态定时器;
私有静态void Main(字符串[]args)
{
Console.WriteLine(“开始工作”);
worker=新的BackgroundWorker();
worker.DoWork+=worker\u DoWork;
worker.RunWorkerCompleted+=worker\u RunWorkerCompleted;
worker.worker支持扫描单元=true;
worker.WorkerReportsProgress=true;
worker.RunWorkerAsync();
//初始化定时器
工作计时器=新计时器(勾选,空,
新时间跨度(0,0,0,10),//<在第一次滴答声之前等待的时间量。
新的时间跨度(0,0,0,10));//<每10秒间隔勾选一次
Console.ReadLine();
}
私有静态无效工作程序\u RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
workTimer.Dispose();
如果(e.取消)返回;
//计时器滴答响之前完成的作业
Console.WriteLine(“完成工作”);
}
私有静态无效工作线程(对象发送器,工作线程)
{
对于(int i=0;i<12;i++)
{
//如果取消挂起,则取消工作进程。
if(工作人员取消挂起)
{
e、 取消=真;
打破
}
控制台写入线(i);
睡眠(1000);
}
}
私有静态无效勾号(对象状态)
{
//停止工作人员并处理计时器。
WriteLine(“作业花费的时间太长”);
worker.CancelAsync();
worker.Dispose();
workTimer.Dispose();
}
}
}

我希望这能帮到你

using System;
using System.ComponentModel;
using System.Threading;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static BackgroundWorker worker;
        private static Timer workTimer;

        private static void Main(string[] args)
        {
            Console.WriteLine("Begin work");
            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.WorkerSupportsCancellation = true;
            worker.WorkerReportsProgress = true;
            worker.RunWorkerAsync();

            // Initialize timer
            workTimer = new Timer(Tick, null,  
                                  new TimeSpan(0, 0, 0, 10),  // < Amount of time to wait before the first tick.
                                  new TimeSpan(0, 0, 0, 10)); // < Tick every 10 second interval
            Console.ReadLine();


        }

        private static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            workTimer.Dispose();
            if (e.Cancelled) return;

            // Job done before timer ticked
            Console.WriteLine("Job done");
        }

        private static void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 12; i++)
            {
                // Cancel the worker if cancellation is pending.
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                Console.WriteLine(i);
                Thread.Sleep(1000);                
            }
        }

        private static void Tick(object state)
        {
            // Stop the worker and dispose of the timer.
            Console.WriteLine("Job took too long");
            worker.CancelAsync();
            worker.Dispose();

            workTimer.Dispose();
        }
    }
}
使用系统;
使用系统组件模型;
使用系统线程;
命名空间控制台应用程序1
{
内部课程计划
{
私人静态后台工作人员;
专用静态定时器;
私有静态void Main(字符串[]args)
{
Console.WriteLine(“开始工作”);
worker=新的BackgroundWorker();
worker.DoWork+=worker\u DoWork;
worker.RunWorkerCompleted+=worker\u RunWorkerCompleted;
worker.worker支持扫描单元=true;
worker.WorkerReportsProgress=true;
worker.RunWorkerAsync();
//初始化定时器
工作计时器=新计时器(勾选,空,
新时间跨度(0,0,0,10),//<在第一次滴答声之前等待的时间量。
新的时间跨度(0,0,0,10));//<每10秒间隔勾选一次
Console.ReadLine();
}
私有静态无效工作程序\u RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
workTimer.Dispose();
如果(e.取消)返回;
//计时器滴答响之前完成的作业
Console.WriteLine(“完成工作”);
}
私有静态无效工作线程(对象发送器,工作线程)
{
对于(int i=0;i<12;i++)
{
//如果取消挂起,则取消工作进程。
if(工作人员取消挂起)
{
e、 取消=真;
打破
}