C#Threading - 如何启动和停止线程

8bi*_*cat 19 c# multithreading

任何人都可以给我一个关于线程主题的开端吗?我想我知道如何做一些事情,但我需要知道如何做以下事情:

设置一个主线程,它将保持活动状态,直到我发出信号停止为止(如果你想知道,它会在收到数据时终止).然后我想要第二个线程开始,它将从文本框中捕获数据,并在我发出信号时退出,当用户按下回车键时发生.

干杯!

GHz*_*GHz 20

我就是这样做的......

public class ThreadA {
    public ThreadA(object[] args) {
        ...
    }
    public void Run() {
        while (true) {
            Thread.sleep(1000); // wait 1 second for something to happen.
            doStuff();
            if(conditionToExitReceived) // what im waiting for...
                break;
        }
        //perform cleanup if there is any...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在自己的线程中运行它...(我这样做是因为我也想将args发送到线程)

private void FireThread(){
    Thread thread = new Thread(new ThreadStart(this.startThread));
    thread.start();
}
private void (startThread){
    new ThreadA(args).Run();
}
Run Code Online (Sandbox Code Playgroud)

通过调用"FireThread()"创建线程

新创建的线程将一直运行,直到满足其停止条件,然后它就会死掉......

您可以通过代表向"主"发出信号,告诉它线程何时死亡.所以您可以启动第二个......

最好通读:这篇MSDN文章


Ali*_*ini 10

Thread th = new Thread(function1);
th.Start();
th.Abort();

void function1(){
//code here
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为`Abort()`应该是最后的手段.最好设置一个标志并让线程优雅地停止. (14认同)
  • -1:对不起,但是`Thread.Abort`几乎就是_never_这样做的方式.带有`ManualResetEvent`的循环 - 甚至是一个易失性布尔标志 - 将是一种更安全的方法. (10认同)

MrW*_*Wuf 5

在生成的线程中使用静态AutoResetEvent使用Set()方法回调主线程.这个家伙有一个关于如何使用它的相当不错的演示.

AutoResetEvent澄清