gpt4 book ai didi

C# 线程多次调用但运行一次

转载 作者:行者123 更新时间:2023-11-30 12:11:06 32 4
gpt4 key购买 nike

<分区>

基本上我有一个带有按钮的表单,当按下按钮时,它会创建一个运行线程的类的实例。当线程完成时,它会自动调用 Thread.Abort()。

我目前的代码归结为:

按钮:

private void Buttonclick(object sender, EventArgs e)
{
MyClass c = new MyClass()
c.Do_your_thing();
}

类:

public class MyClass
{
Thread t;

public void Do_your_thing()
{
t = new Thread(Running_code);
t.Start();
}

private void Running_code()
{
//Perform code here
t.Abort();
}
}

当我点击一次按钮时,一切正常。但是当我再次按下按钮时,没有任何反应。

当我不使用 t.Abort() 时,一切正常。但是不使用 t.Abort() 会导致内存泄漏并且程序无法正确关闭(线程永远不会关闭,因此进程将保持事件状态)。

谁能给我解释一下这是怎么回事?我该如何解决?

编辑:根据要求,我发布了一些实际代码

public class MyClass
{
public void Test()
{
t = new Thread(() =>
{
wb.DocumentCompleted += get_part;
wb.Navigate("http://www.google.com");
Application.Run();
});

t.SetApartmentState(ApartmentState.STA);
t.Start();
}

public void get_part(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var br = sender as WebBrowser;
string url = e.Url.ToString();

//Here is some code that compares the url to surten predefined url. When there is a match, it should run some code and then go to a new url

if(url == string_final_url)
{
//Finally at the url I want, open it in a new Internet Explorer Window
Process proc = Process.Start("IExplore.exe", url);
}
}
}

这是一个小型网络爬虫程序的一小部分。它导航到需要一些登录信息的网页。当我到达我真正想要的页面时,他应该在新的 Internet Explorer 中打开它。

当我调用这段代码并关闭表单时,它在进程树中仍然可见。而且当我多次点击按钮时,使用的内存越来越高,我怀疑这是某种内存泄漏。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com