以下是我的代码,
我知道它不是很好的编码实践,只需创建一个模板来模拟thread
处理参数和返回值
它在调用函数完成之前到达最后一行的问题,导致exception
public class data_holder
{
public DataTable dtable = new DataTable();
public DataTable dt = new DataTable();
}
class Program
{
public static List<int> int_list1 = new List<int>();
public static List<int> int_list2 = new List<int>();
public static bool done = false;
static void Main(string[] args)
{
data_holder dh = new data_holder();
dh.dtable.Columns.Add("Id", typeof(string));
dh.dtable.Columns.Add("DOB", typeof(DateTime));
dh.dtable.Columns.Add("Refno", typeof(string));
for (int i = 0; i <= 10; i++)
{
DataRow dr = dh.dtable.NewRow();
dr["Id"] = i.ToString();
dr["DOB"] = DateTime.Now.AddDays(i);
dr["Refno"] = new Guid();
dh.dtable.Rows.Add(dr);
}
StringBuilder sb = new StringBuilder();
ThreadStart ts = new ThreadStart(processTable);
Thread t1 = new Thread(ts);
t1.Start();
t1.Join();
if (done == true)
//while(!done)
{
for (int i = 0; i < dh.dtable.Rows.Count; i++)
{
sb.Append(dh.dtable.Rows[i][0].ToString());
sb.Append(" ");
sb.Append(dh.dtable.Rows[i][1].ToString());
sb.Append(" ");
sb.Append(dh.dtable.Rows[i][2].ToString());
sb.Append(" ");
sb.Append(dh.dtable.Rows[i][3].ToString());
sb.Append(" ");
sb.Append(dh.dtable.Rows[i][4].ToString());
sb.Append(" ");
sb.Append(dh.dtable.Rows[i][5].ToString());
sb.Append(Environment.NewLine);
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
static void processTable()
{
data_holder dh = new data_holder();
dh.dtable.Columns.Add("col1", typeof(string));
dh.dtable.Columns.Add("col2", typeof(string));
dh.dtable.Columns.Add("col3", typeof(string));
for (int i = 0; i < dh.dtable.Rows.Count; i++)
{
dh.dtable.Rows[i]["col1"] = "col_1_Dummy";
dh.dtable.Rows[i]["col2"] = "col_2_Dummy";
dh.dtable.Rows[i]["col3"] = "col_3_Dummy";
}
done = true;
}}
在
显示错误sb.Append(dh.dtable.Rows[i][3].ToString());
错误:{“找不到第3列。”}
我知道它是因为datatable
还没有准备好,在执行processTable()
之前不应该执行控制吗?
答案 0 :(得分:0)
HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("your url");
myHttpWebRequest.Timeout = 1000 ;
适用于本地processTable
变量,不对全局dh
变量执行任何操作
所以dh
指的是Rows[i][3]
- s行的第四列,它不存在。
那是什么例外。
答案 1 :(得分:0)
这是解决方案
信用@vyrp
有两个data_holder实例,这就是创建问题
声明为
public static data_holder dh = new data_holder();
它可以满足期望。