如何在C#中的不同类的两个线程之间共享数据

时间:2015-03-31 14:51:46

标签: c# multithreading variables

我搜索了很多,但我找不到适合我的答案。以下是一些相关的代码片段。

 public partial class Form1 : Form
{

    private String[,] _maze;
    private String _state;
    private int _start;
    private Boolean _finished = false;

    private void button1_Click(object sender, EventArgs e)
    {
        var agent = new Agent(_maze, new ArrayList {_start}, _finished);
        var agentThread = new Thread(agent.Run);

        agentThread.Start();

        while (!_finished)
        {
            Thread.Sleep(100);
        }

        //some other code
     }
}

代理人:

public class Agent
{
    volatile String[,] _maze;
    ArrayList _path;
    volatile Boolean _finished;

    public Agent(String[,] maze, ArrayList path, Boolean finished)
    {
        _maze = maze;
        _path = path;
        _finished = finished;
    }
}

我需要共享以下变量:_maze和_finished,以便所有可能的线程(在本例中为表单和代理)可以访问相同的数据。我已经尝试了属性refvolatile,我还使用[同步]来保护Agent类。

知道代理商还启动具有相同要求的其他代理商也很重要。

就我而言,同步数据并不重要(我认为)。

更新 我们应该使用这种特殊算法实现一个迷宫求解器:在每个步骤中,当代理有多个可以去的字段时,他应该克隆自己并从那里开始所有可能的路径。 如果一个代理找到了目标,那么每个代理都应该停止,并且Form类必须进行一些计算,比如突出显示路径。

1 个答案:

答案 0 :(得分:-2)

也许您可以尝试使用静态变量和静态方法来实现这一点。如果想要是线程安全的,可以考虑在静态方法中添加锁。