目标是从webservice收集股票信息,将其存储在列表中。 *创建第二个线程,每隔5秒*调用按钮点击事件*以继续更新
如何创建第二个线程来每5秒调用一次按钮点击事件?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Threading;
namespace StockList
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// class with stock values declared as properties
class StockClass
{
public string Symbol { get; set; }
public string Last { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public string Change { get; set; }
public string Open { get; set; }
public string High { get; set; }
public string Low { get; set; }
public string Volume { get; set; }
public string MktCap { get; set; }
public string PreviousClose { get; set; }
public string PercentageChange { get; set; }
public string AnnRange { get; set; }
public string Earns { get; set; }
public string PE { get; set; }
public string Name { get; set; }
}
//storing each stock data in a StockList
List<StockClass> StockList = new System.Collections.Generic.List<StockClass>();
//button will call GettingData method
public void button1_Click(object sender, EventArgs e)
{
GettingData();
}
/*GettingData method gets data from webservice, converts string to xml and stored
in object myStock of type Stock */
public void GettingData()
{
ServiceReference1.StockQuoteSoapClient client = new ServiceReference1.StockQuoteSoapClient("StockQuoteSoap");
string result = client.GetQuote(textBox1.Text);
System.Data.DataTable dataTable = new DataTable();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(result);
XmlNodeList nodes = xmlDoc.SelectNodes("/StockQuotes/Stock");
foreach (XmlNode xm in nodes)
{
var myStock = new StockClass()
{
Name = xm["Name"].InnerText,
Low = xm["Low"].Value,
Symbol = xm["Symbol"].InnerText,
Last = xm["Last"].InnerText,
Date = xm["Date"].InnerText,
Time = xm["Time"].InnerText,
Change = xm["Change"].InnerText,
Open = xm["Open"].InnerText,
High = xm["Open"].InnerText,
Volume = xm["Volume"].InnerText,
MktCap = xm["MktCap"].InnerText,
PreviousClose = xm["PreviousClose"].InnerText,
PercentageChange = xm["PercentageChange"].InnerText,
AnnRange = xm["AnnRange"].InnerText,
Earns = xm["Earns"].InnerText,
PE = xm["P-E"].InnerText,
};
StockList.Add(myStock);
}
lblCompanyName.Text = StockList[StockList.Count - 1].Name;
}
}
}
答案 0 :(得分:0)
private Timer _timer = new Timer(state => button1_Click(this, new EventArgs(), null, 1, 5000);
对于实际工作线程使用,例如Background Worker或Task
答案 1 :(得分:0)
您可以轻松地使用Timer以5秒的间隔调用该方法,您所要做的就是创建一个具有所需定时器间隔的计时器实例,并在Elapsed事件调用中调用需要调用的方法每5秒钟一次。
Place this code within Form's constructor
public Form1()
{
Timer timer = new Timer() { Enabled = true, Interval = 5000 };
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
Also add the following event to your form
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
GettingData();
}