public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Thread t1,t2;
private static DataTable tdlData = new DataTable("Datas");
private DataColumn dc = tdlData.Columns.Add("ProductId", Type.GetType("System.String"));
private List<string> ProductName;
private bool flag = false;
private static string RowName;
//获取数据源
public void GetData()
{
DataRow newRow = tdlData.NewRow();
if (!string.IsNullOrEmpty(RowName))
{
newRow["ProductId"] = RowName;
tdlData.Rows.Add(newRow);//将每条记录插入到临时表
}
//模拟的时候可以设定每有5条数据的时候,传递一次参数
//但是实际应用的时候应该怎么办呢?
if (tdlData.Rows.Count == 5)
{
flag = true;
// tdlData.Reset();
}
MessageBox.Show("临时表记录条数" + tdlData.Rows.Count);
}
public void ToList()
{ mut.WaitOne();
//Monitor.Enter(this);
//lock (this)
//{
if (flag)
{
ProductName = new List<string>();
for (int i = 0; i < tdlData.Rows.Count; i++)
{
ProductName.Add(tdlData.Rows[i].ItemArray[0].ToString());
}
MessageBox.Show("存入数据库的数据条数" + ProductName.Count.ToString());
flag = false;
tdlData.Rows.Clear();
}
//}
//Monitor.Exit(this);
mut.ReleaseMutex();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{ if (t1.IsAlive)
{
t1.Abort();
}
if (t2.IsAlive)
{
t2.Abort();
}
}
private void Form1_Activated(object sender, EventArgs e)
{
this.txtInput.Focus();
}
private void txtInput_KeyUp(object sender, KeyEventArgs e)
{
if (this.txtInput.Text.Length == 5)
{
this.txtInput.Focus();
this.listBox1.Items.Add(txtInput.Text.Trim());
RowName = txtInput.Text.Trim();
t1 = new Thread(new ThreadStart(this.GetData));
t1.Start();
t2 = new Thread(new ThreadStart(this.ToList));
t2.Start();
}
else if (txtInput.Text.Length > 5)
{
this.txtInput.Clear();
}
}
}
注:这个程序模拟没有问题,但是实际操作的时候该怎么办呢?
实际操作的时候不可能定义一个数字,每当扫描一定数量的时候就把数据搞到DataTable中,
比如说,设定1000个,但是今天就生产了10001个,前10000个当然没有问题,插入数据库什么的都没事,
但是剩下的那一个该怎么处理?
所以说,定义一个具体数字是不切合实际的,征求想法!!!!
如果你有更好的想法,请留言或者联系本人,不甚感激!
QQ:834217941半部論語