【问题标题】:How to Exit Threads Safely如何安全退出线程
【发布时间】:2015-01-11 17:10:21
【问题描述】:

我不得不使用线程(第一次),并注意到当我使用 ALT + F4 关闭表单时,线程继续运行。这绝对不是预期的结果,因为我需要这个线程在退出时停止运行。我目前有:

    public void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs E)
    {
        Continue = false;
    }


    Boolean Continue = true;

    int MouseX = Cursor.Position.X;
    int MouseY = Cursor.Position.Y;
    Point MousePosition;
    public static void LockMouse()
    {
        Form1 Form = new Form1();
        while (Form.Continue)
        {
            Form.MousePosition.X = 0;
            Form.MousePosition.Y = 0;
            Cursor.Position = Form.MousePosition;
        }


    }

这是线程被创建者:

    public void CreteThread()
    {
        Thread Worker = new Thread(LockMouse);
        Worker.Start();
    }

我注意到当 ALT + F4 时线程保持打开状态,这进入了一个不打算的完整鼠标锁定!似乎表单没有达到关闭功能?

我想指出,因为一些用户可能会将其视为可能的恶意代码并相应地拒绝投票或出于错误原因请求关闭。此应用程序正在创建并供我自己使用,不会分发

【问题讨论】:

  • 将你的线程声明为后台线程,当所有其他线程结束时它将被销毁:IsBackground
  • 这里没有看到恶意代码?
  • 无论如何...与您的第一个问题无关...不要使用while循环来获取坐标...使用事件处理程序MouseMove这将更高效,你摆脱你的线程。
  • @JPVenson 看看,谢谢参考!
  • 不客气...添加为 Awnser。

标签: c# multithreading threadpool


【解决方案1】:

将您的线程声明为背景线程,当所有其他线程结束时它将被销毁:IsBackground。

无论如何...与您的第一个问题无关...不要使用 while 循环来获取坐标...使用 Eventhandler MouseMove 这将更高效,并且您摆脱了线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2013-07-30
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多