【问题标题】:how to cancel thread c#如何取消线程c#
【发布时间】:2017-06-26 01:26:28
【问题描述】:

嘿,经过长时间的研究,我想出了一种取消线程的方法,但是当我取消线程时我遇到了一个问题,这是我的代码 first.so 例如,当我在表单工作时单击 button3 时,它会杀死进程,但它给了我一个错误(chrome unrechable)

public void test1()
{
var dr = new chromdriver();
dr.navigate().GoToUrl("http://google.com");
if(xx != null)
 {
 IWebElement emal = dr.FindElement(By.XPath("//[@id=\"Email\"]"));
 emal.Sendkeys(email)
 }
 else{
  IWebElement emal = dr.FindElement(By.XPath("//[@id=\"Email\"]"));
 emal.Sendkeys(email)
}
}
 private void button2_Click(object sender, EventArgs e)
    {
   thread thr = new thread(test1);
   thr.Start();}


private void button3_Click(object sender, EventArgs e)
    {
   Process[] processes = Process.GetProcessesByName("chrome");
        Process[] array = processes;
        for (int i = 0; i < array.Length; i++)
        {
            Process process = array[i];
            process.Kill();
        }
        Thread thr = new Thread(review);
        thr.Abort();
    }

【问题讨论】:

  • 你不是在取消线程,而是在杀死进程。你不能取消 chrome 线程,因为它在另一个进程中,所以你这样做的方式是唯一的方法,除了你不需要所有关于线程的代码,这是无关紧要的。
  • 在线程上调用 .Abort() 会导致 .NET 运行时进入无效状态并破坏所有线程的执行 - 因此,您唯一应该调用它的时间是当您正在尝试强制关闭应用程序。您应该始终构建您的代码,以便线程自然结束。
  • "[...] 我想出了一个取消线程的方法,但是当我取消线程时我遇到了一个问题 [...]" - 你找到方法了吗?你到底是什么意思?
  • 是的,我在错误的位置声明变量

标签: c# multithreading


【解决方案1】:

你的变量被声明在错误的位置

        private Thread thr = null;
        public void test1()
        {
            var dr = new chromdriver();

            dr.navigate().GoToUrl("http://google.com");
            if(xx != null)
            {
                IWebElement emal = dr.FindElement(By.XPath("//[@id=\"Email\"]"));
                emal.Sendkeys(email);
            }
            else
            {
                IWebElement emal = dr.FindElement(By.XPath("//[@id=\"Email\"]"));
                emal.Sendkeys(email);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
           thr = new Thread(test1);
           thr.Start();
        }


        private void button3_Click(object sender, EventArgs e)
        {
            Process[] processes = Process.GetProcessesByName("chrome");
            Process[] array = processes;
            for (int i = 0; i < array.Length; i++)
            {
                Process process = array[i];
                process.Kill();
            }
            thr.Abort();
        }

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多