111,094
社区成员




StockDrv.CS:
启动线程:
public StockDrv()
{
InitDTColumns();
Thread t = new Thread(new ThreadStart(FullDataSource));
t.Start();
}
/// <summary>
/// 填充数据源
/// </summary>
private void FullDataSource()
{
tagRCV_REPORT_STRUCTEx quote;
bool flag = false;
while (true)
{
if (QuoteCache.Count > 0)
{
ArrayList keys=null;
try
{
lock (QuoteCache)
{
keys = new ArrayList(QuoteCache.Keys);
}
}
catch (Exception e)
{
keys = new ArrayList();
}
try
{
for (int i = 0; i < keys.Count; i++)
{
quote = (tagRCV_REPORT_STRUCTEx)QuoteCache[keys[i]];
//判断当前行情是否已存在数据源中
DataRow[] rows = datasource.Select("m_szLabel='" + quote.m_szLabel + "'");
if (rows.Length > 0)
{
//判断数据是否已更新
if (Convert.ToSingle(rows[0]["m_fVolume"]) < quote.m_fVolume ||
(Convert.ToSingle(rows[0]["m_fVolume"]) == quote.m_fVolume
&& Convert.ToSingle(rows[0]["m_fNewPrice"]) != quote.m_fNewPrice))
{
DateTime dt = new DateTime(1970, 1, 1);
dt = dt.AddSeconds(quote.m_time);
dt = dt.AddHours(8);
string strTime = dt.ToString("yyyy-MM-dd HH:mm:ss");
rows[0].BeginEdit();
rows[0]["m_cbSize"] = quote.m_cbSize;
rows[0]["m_time"] = strTime;
rows[0]["m_wMarket"] = quote.m_wMarket;
rows[0]["m_szName"] = quote.m_szName;
rows[0]["m_fLastClose"] = quote.m_fLastClose;
rows[0]["m_fOpen"] = quote.m_fOpen;
rows[0]["m_fHigh"] = quote.m_fHigh;
rows[0]["m_fLow"] = quote.m_fLow;
rows[0]["m_fNewPrice"] = quote.m_fNewPrice;
rows[0]["m_fVolume"] = quote.m_fVolume;
rows[0]["m_fAmount"] = quote.m_fAmount;
rows[0].EndEdit();
flag = true;
}
else {
flag = false;
}
}
else
{
DataRow row1 = datasource.NewRow();
DateTime dt = new DateTime(1970, 1, 1);
dt = dt.AddSeconds(quote.m_time);
dt = dt.AddHours(8);
string strTime = dt.ToString("yyyyMMdd HH:mm:ss");
row1.BeginEdit();
row1["m_cbSize"] = quote.m_cbSize;
row1["m_time"] = strTime;
row1["m_wMarket"] = quote.m_wMarket;
row1["m_szLabel"] = quote.m_szLabel;
row1["m_szName"] = quote.m_szName;
row1["m_fLastClose"] = quote.m_fLastClose;
row1["m_fOpen"] = quote.m_fOpen;
row1["m_fHigh"] = quote.m_fHigh;
row1["m_fLow"] = quote.m_fLow;
row1["m_fNewPrice"] = quote.m_fNewPrice;
row1["m_fVolume"] = quote.m_fVolume;
row1["m_fAmount"] = quote.m_fAmount;
row1.EndEdit();
datasource.Rows.Add(row1);
flag = true;
}
}
if (flag)
{
TSQuoteEventArgs e = new TSQuoteEventArgs(datasource);
OnQuote(this, e);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
}
Form1.CS:
public void fTSdrv_OnQuote(Object sender, TSQuoteEventArgs e)
{
dataGridView1.DataSource = e.dtSuorce;
}
public partial class Form1 : Form
{
public BindingList<Info> InfoList { get; set; }
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
private void Form1_Load(object sender, EventArgs e)
{
InfoList = new BindingList<Info>();
dataGridView1.DataSource = InfoList;
dataGridView1.ReadOnly = true;
dataGridView1.AllowUserToAddRows = false;
ThreadPool.QueueUserWorkItem(new WaitCallback((obj) =>
{
while (true)
{
Thread.Sleep(100);
dataGridView1.Invoke(new Action(() =>
{
InfoList.Add(new Info
{
A = DateTime.Now.ToString()
});
dataGridView1.Refresh();
}));
}
}));
}
public class Info
{
public string A { get; set; }
}
}
这个时候就看出来wpf比较好用了