0

我有按钮调用此代码

private void but_Click(object sender, EventArgs e)
{
    Thread My_Thread = new Thread(() => Send_File());
    My_Thread.IsBackground = true;
    My_Thread.Start();
}

我想要一个杀人的方法

我的线程

从函数

发送文件()

请帮助我如何解决它???:(

4

4 回答 4

1

只需像在不同函数中使用的任何其他变量(例如 int 或 string)一样全局声明您的线程:

Thread My_Thread; //goes before your functions/main method

然后使用它:

private void but_Click(object sender, EventArgs e)
{
    My_Thread = new Thread(Send_File);
    My_Thread.IsBackground = true;
    My_Thread.Start();
}

并杀死它:

private void Send_File()
{
    MyThread.Abort();
}

如果您正在谈论 Send_File 在线程中运行,只需退出它,例如使用break,停止所有循环以完成它。

编辑:正如 Austin Salonen 在他的评论中所说,这将覆盖线程引用。我的建议是使用线程列表。

public List<Thread> ThreadList=new List<Thread>(); //goes before your functions/main method (public for use in other classes)

并使用它:

private void but_Click(object sender, EventArgs e)
{
    Thread My_Thread = new Thread(Send_File);
    My_Thread.IsBackground = true;
    My_Thread.Start();
    int ThreadIndex = ThreadList.Count; //remember index
    ThreadList.Add(My_Thread);
}

您只需要记住列表的索引即可再次创建对线程的引用。

要中止一个线程,只需使用它的索引:

ThreadList[ThreadIndex].Abort();
ThreadList[ThreadIndex] = null;

或者只是让线程返回。

于 2012-08-14T21:46:42.507 回答
0

在类级别定义线程:

public class Whatever
{
    Thread My_Thread;

    private void but_Click(object sender, EventArgs e)
    {
        My_Thread = new Thread(() => Send_File());
        //...
    }

    private void Send_File()
    {
        My_Thread.Abort()  //though I can never ever ever encourage doing this
        //...
    }
}

或者干脆回来。当一个线程的工作方法返回时,它被杀死。

于 2012-08-14T21:47:29.587 回答
0

如果您需要中止正在执行的操作,我强烈建议您不要直接使用 Thread。我会推荐一个任务并使用CancellationTokenSource它来传达取消请求。如果您需要与 UI 进行通信,例如进度,我建议您使用BackgroundWorker. 如果必须使用Thread,则需要通知用户中止。您可以通过使用线程定期检查以查看它是否应该继续的共享布尔值来做到这一点。您应该以线程安全的方式读取/写入该值。也许Interlocked.Exchange会为您这样做,Thread.VolatileRead或者Thread.VolatileWrite...

当您使用 Thread.Abort 时,它只会停止线程,除非线程试图捕获ThreadAbortException. 当您开始对正常逻辑流程使用异常时,这有点不确定;但是,这是可行的。在块Thread.Abort的上下文中存在死锁的可能性。try/catch/finally(以及任何其他受限区域)但是,Thread.Abort并非全部推荐:http ://haacked.com/archive/2004/11/12/how-to-stop-a-thread.aspx

于 2012-08-14T23:15:26.710 回答
0

Thread.Abort() 是您正在寻找的那个。

参考资料和有用的页面:

于 2012-08-15T17:26:08.123 回答