在C#中获取和终止类/线程

时间:2009-11-09 21:48:55

标签: c# class multithreading

好的,所以这就是我在做什么:

class Connection
{
    public int SERVERID;
    private Thread connection;
    public Connection()
    {
        connection = new Thread(new ThreadStart(this.Run));
    }
    public void Start(int serverid)
    {
        SERVERID = serverid;
        connection.Start();
    }
    void Run()
    {
        while(true)
        {
            //do stuff here
        }
    }
}

现在,有一个我需要管理的课程,这就是我怎么称呼它:

static void Main(string[] args)
{
    StartConnection(1);
    StartConnection(2);
    StartConnection(3);

    //etc
}
static void StartCOnnection(int serverid)
{
    Connection connect = new Connection();
    connect.Start(serverid);
}

我原本试图做这样的事情:

foreach(Connection connect in Connection)
{
    if(connect.SERVERID == 2)
    {
        //destroy the thread, and class.
    }
}

但是得到错误“'连接'是'类型'但是像'变量'一样使用  “,我不知道怎么做才能破坏线程和类部分......

要点: 所以我基本上需要做的是获取所有开放的Connetion类的列表,并且能够基于类的设置能够销毁它。我该怎么做呢?

〜代码示例

2 个答案:

答案 0 :(得分:3)

你没有说出你遇到了什么样的错误。这可能有所帮助。也;您可能希望在连接上添加一个类似于以下内容的停止方法:

public void Stop()
{
    if (this.connection.IsAlive)
    {
        this.stopCondition = true;
        this.connection.Join();
    }
}

其中stopCondition是在while循环中检查的类成员(而不仅仅是'true')。

答案 1 :(得分:1)

Main()中的代码将无法编译。

您需要以下内容:

List<Connection> connections = new List<Connection> ();

Connection connect;

connect = new Connection();
connect.Start(1);
connections.Add(connect);

connect = new Connection();
connect.Start(2);
connections.Add(connect);

// etc

然后你可以稍后做:

foreach(Connection connect in connections)
{
    if(connect.SERVERID == 2)
    {
        //destroy the thread, and class.
    }
}

对于实际停止,我同意SnOrfus的回答。你需要构建一些逻辑来打破while循环。