我的代码:
public class CLASS_A {
public static Dictionary<int, CLASS_A> List = new Dictionary<int, CLASS_A>;
public static PP_CLASS pp = null;
public static CLASS_A ID
{
get
{
int key = get_threadID;
if (List.ContainsKey(key))
return List[key];
else
return null;
}
set
{
int key = get_threadID;
List[key] = value;
}
}
public virtual void init(lib, name)
{
...
if (name != "")
{
if (pp == null)
PP = this;
}
...
}
}
因此,无论哪个线程调用 init,它的 id 都用于存储它(无论谁调用)。例如,我的列表如下所示:
45 = CLASS_A_object0
67 = CLASS_A_object1
...
但是现在当另一个线程调用 pp 上的方法时,比如说 pp CLASS_A.pp.setWelcome
,这将为 pp 返回 null,并抛出 null 异常!因为当调用 set 时,线程 id 会不同,并且不会在列表中。
那么我是否有可能知道调用了哪个对象以便进行反向查找?或者也许是不同的解决方案?
为什么我想要这个:
最初我们连接到一个设备,所以没关系。现在有多个设备,每个设备都有自己的 ip/port。初始代码刚刚public static PP_CLASS pp = null;
所以其他人将只是使用类名调用 pp 上的方法,事情很好。
以前的行为:软件从文件中选择设备列表,由于 pp 是静态的,它只与第一个设备对话。我添加了pp==null
我在最初的帖子中忘记的那一行。因此,当代码开始时pp==null
将为真并分配第一个设备,但现在对于其他设备pp==null
将是假的,因此我无法与其他设备交谈。
如果需要更多详细信息,请告诉我。