private DataTable dt = new DataTable();
private string[] symbolPool = new string[100];
private void Form1_Load(object sender, System.EventArgs e)
{
//建立資料表
dt.Columns.Add("Symbol", typeof(string));
dt.Columns.Add("Price", typeof(float));
dt.Columns.Add("Quantity", typeof(int));
dt.Columns.Add("Amount", typeof(int));
//Symbol是Primary Key
dt.PrimaryKey = new DataColumn[] { dt.Columns["Symbol"] };
//建立代號清單
for (int i = 0; i < symbolPool.Length; i++)
symbolPool[i] = i.ToString("0000");
//依代號排序
dt.DefaultView.Sort = "Symbol";
c1.DataSource = dt;
}
private void btnGo_Click(object sender, System.EventArgs e)
{
if (btnGo.Text=="GO")
{
bStop=false;
//開啟五條Thread同時塞資料
for (int i=0; i<5; i++)
{
System.Threading.ThreadPool.QueueUserWorkItem(
new WaitCallback(updateTrade));
}
btnGo.Text="Cancel";
}
else
{
bStop = true;
btnGo.Text = "GO";
}
}
//利用bStop旗標要求停止測試
private bool bStop = false;
private void updateTrade(object args)
{
Random rnd = new Random();
while (!bStop)
{
//用亂數產生測試資料
string symbol = rnd.Next(100).ToString("0000");
float prz = Convert.ToSingle(
Math.Round(rnd.NextDouble()*100, 2));
int qty = rnd.Next(50) * 1000;
int amt = Convert.ToInt32(prz * qty);
try
{
//先找看看是否已有該筆資料
DataRow row = dt.Rows.Find(symbol);
bool bNew = false;
//沒有時則準備新增
if (row==null)
{
row = dt.NewRow();
bNew = true;
}
row["Symbol"]=symbol;
row["Price"]=prz;
row["Quantity"]=qty;
row["Amount"]=amt;
if (bNew)
dt.Rows.Add(row);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//等待不定長度的時間
Thread.Sleep(rnd.Next(200));
}
}