【发布时间】: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