来自同一实例的字段保留值

Fields from same instance keep values

几天前,作为一个 c# 新手,我写了一个 class 并感谢将不同线程使用的公共变量(但不同的值)放入其中很好,每个线程访问不同的 postgres 数据库。最近,对 c# 有了更多的了解,我想知道这是否真的正确。根据我到处阅读的内容,我预计由线程 "one" 初始化的字段将被线程 "two" 覆盖,换句话说,两个线程最终将获得所有字段的相同值。

事实上,它似乎并没有那样工作,每个线程似乎都保留自己的值,线程一仍然具有 db1 值,线程二仍然具有 db2 值。这怎么可能?我是不是错了,感谢我理解来自同一 class 的不同实例的字段共享相同的值?

我用的是Visual Studio 2013,需要在代码开头设置[STAThread],可以解释一下吗?

感谢您的友好和熟练的解释

奥利维尔

public class Context
{
    public string host; 
    public string port;
    public string user;
    public string pwd;
    public string dbname;
...
public Context(string db) {// Each thread is launched with a different database name
        try { 
        var rep = string.Format(@"D:\Bd\{0}\params\config.txt",db); // one file for each thread
        if (File.Exists(rep)) {
            var dic = File.ReadAllLines(rep)
              .Select(l => l.Split(new[] { '=' }))
              .ToDictionary(s => s[0].Trim(), s => s[1].Trim());
            host = dic["host"];
            port = dic["port"];
            user = dic["user"];
            pwd = dic["pwd"];
            dbname = db;
...
Thread thThd1 = new Thread(startthd1);
thThd1.Start();

public static void startthd1() {
   Context ncontext = new Context("db1");
   Chkthd gth = new Chk(ncontext);
    }

Thread thThd2 = new Thread(startthd2);
thThd2.Start();

public static void startthd2() {
   Context ncontext = new Context("db2");
   Chkthd gth = new Chk(ncontext);
    }

鉴于问题中的示例代码,没有理由期望一个线程覆盖另一个线程的字段。当该代码执行时,将创建两个新线程,这些线程独立并并发地执行文件 I-O 读取 "db1" 和 "dn2" 文件路径。

如果您在 startthd1() 和 startthd2() 中的 "Chkthd gth = new Chk(ncontext);" 语句上放置断点,您应该期望两个线程同时在这些语句处停止,并且每个方法中的局部变量将不同的数据保存为从两个文件中读取。

我怀疑示例代码中不需要使用线程,并且有更简单的解决方案。

下面的代码 运行 速度稍慢,是否提供了所需的结果?

Chk gth1 = ReadFileData( "db1" );
Chk gth2 = ReadFileData( "db2" );

public static Chkthd ReadFileData( string dbName ) {
   Context ncontext = new Context("db2");
   return new Chk(ncontext);
    }