C#这个帖子和委托有什么问题吗?

时间:2018-04-03 12:05:39

标签: c# multithreading winforms concurrency parallel-processing

此代码提供异常:System.ArgumentOutOfRangeException

ArrayList conarr = new ArrayList();

conarr.Add("User ID=sysdba;Password=wrongpass1;" +
 "Database=C:\\prod\\file.fdb;DataSource=192.168.0.5;Charset=NONE; Connection Timeout=30;Pooling=false;");

conarr.Add("User ID=sysdba;Password=wrongpass2;" +
 "Database=C:\\prod\\file.fdb;DataSource=192.168.0.5;Charset=NONE; Connection Timeout=30;Pooling=false;");

conarr.Add("User ID=sysdba;Password=GOODPASS;" +
 "Database=C:\\prod\\file.fdb;DataSource=192.168.0.5;Charset=NONE; Connection Timeout=30;Pooling=false;");


for (int t = 0; t < conarr.Count; t++)
{  
    Thread tr = new Thread(delegate() 
    {
        trycon(conarr[t].ToString()); //<---------
    });

    tr.Start();
}

但如果我将此线程创建更改为:

for (int t = 0; t < conarr.Count; t++)
{
    string cs = conarr[t].ToString(); //<------

    Thread tr = new Thread(delegate ()
    {
        trycon(cs); //<-------
    });
    tr.Start();
}

比它工作正常。 为什么? (此代码用于在单独的并行线程中搜索哪个与数据库的连接良好以及哪个连接错误)

0 个答案:

没有答案