我搜索了很多,但我找不到适合我的答案。以下是一些相关的代码片段。
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,以便所有可能的线程(在本例中为表单和代理)可以访问相同的数据。我已经尝试了属性ref
和volatile
,我还使用[同步]来保护Agent类。
知道代理商还启动具有相同要求的其他代理商也很重要。
就我而言,同步数据并不重要(我认为)。
更新 我们应该使用这种特殊算法实现一个迷宫求解器:在每个步骤中,当代理有多个可以去的字段时,他应该克隆自己并从那里开始所有可能的路径。 如果一个代理找到了目标,那么每个代理都应该停止,并且Form类必须进行一些计算,比如突出显示路径。
答案 0 :(得分:-2)
也许您可以尝试使用静态变量和静态方法来实现这一点。如果想要是线程安全的,可以考虑在静态方法中添加锁。