Отключить поток из другого события "MouseLeave" - C#

Узнай цену своей работы

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

Всем доброго времени суток. Есть голая форма с label. При наведении мышки на нее MouseEnter Эта label перебирает из массива приветсвия на разных языках. Это вроде работает но как потом выключить этот поток я не могу
private void label1_MouseEnter(object sender, EventArgs e)
        {
            Hello hello = new Hello();
            Thread thread = new Thread(new ThreadStart(hello.Run));
            thread.Start();
            while ( thread.IsAlive )
            {
                lb_helloworld.Text = hello.HelloWorld;
                lb_helloworld.Update();
            }
        }
 
        private void lb_helloworld_MouseLeave(object sender, EventArgs e)
        {
            
        }

А это сам класс приветсвия где перебираются они

class Hello
    {
        private string[] Hi = { "дЅ*好世界", "Hello World", "Привет Мир" };
        bool _Run = true;
        
        public bool ToRun
        {
            set { _Run = value; }
        }
        public string HelloWorld { get; set; }
        public void Run()
        {
            while ( _Run )
            {
                for ( int i = 0; i < 3; i++ )
                {
                    Thread.Sleep(500);
                    HelloWorld = Hi[i];
                }
            }
        }
    }
Как выключить его?
Может передать его на задний фон isBackGround или использовать какой нибудь таймер после чего он выключится сам?

Решение задачи: «Отключить поток из другого события "MouseLeave"»

textual
Листинг программы
public partial class Form1: Form
{
    ....
    тело класса вашей формы
    ....
    private Hello _hello;
    
    private void label1_MouseEnter(object sender, EventArgs e)
        {
            _hello = new Hello();
            Thread thread = new Thread(new ThreadStart(_hello.Run));
            thread.Start();
            while ( thread.IsAlive )
            {
                lb_helloworld.Text = hello.HelloWorld;
                lb_helloworld.Update();
            }
        }
 
        private void lb_helloworld_MouseLeave(object sender, EventArgs e)
        {
            _hello.ToRun = false; //После выполнения последней итерации в потоке он завершиться 
        }
 
}

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы