Поставить таймер на выполнение потока - C#

Формулировка задачи:

Здравствуйте. Есть действие, которое при выполнении может зависнуть. Мне нужно переступить его, если оно выполняется дольше 3 минут. Как вариант - поместить действие в отдельный поток и убить его, если время выполнения превышает заданное. Но я не могу понять как это осуществить. Пока время не прошло каждую секунду проверять работает ли еще поток, и если более 3х минут убивать поток? и Как корректно убивать поток из основного?

Код к задаче: «Поставить таймер на выполнение потока - C#»

textual
public partial class Form1 : Form
    {
        static Thread myThread;
        static System.Windows.Forms.Timer MyTimer;
 
        public Form1()
        {
            InitializeComponent();
            myThread = new Thread(func); //Создаем новый объект потока (Thread)
            MyTimer = new System.Windows.Forms.Timer();
            MyTimer.Interval = 1000;
            MyTimer.Tick += new System.EventHandler(timer1_Tick);
        }
 
        static void func()
        {
            //Какое-то большое и страшное действие
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(5000);
            }
        }
 
 
        public static void timer1_Tick(object sender, EventArgs e)
        {
            //Секунда прошла, прерываем поток
            myThread.Abort();
            MyTimer.Stop();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MyTimer.Start();
            myThread.Start(); //запускаем поток
        }
    }

15   голосов, оценка 4.067 из 5


СОХРАНИТЬ ССЫЛКУ