我一直在尝试了解有关异步任务和线程的更多信息,但没有取得很大进展。
我正在尝试加载“引擎”类型的线程,该线程将在启动时在后台运行,并且能够访问 UI 线程以更新变量,而无需挂起 UI 线程。
在下面的代码中,Engine 被调用,并创建了一个 Ticker 对象,该对象保存了称为 Last 的 (Litecoin/USD) 的当前值,还保存了其他几个有用的值。此代码成功地将当前值分配给 label1.text。我不一定需要代码,但我会采取什么方法在后台每秒创建一个代码对象并使用每个新的代码对象值更新 UI 线程。
这对后台工作人员来说是一个很好的案例吗?
private void Form1_Load(object sender, EventArgs e)
{
Engine();
}
private void Engine()
{
Ticker ltcusd = BtceApi.GetTicker(BtcePair.LtcUsd);
label1.Text = "LTC/USD:" + ltcusd.Last;
}
编辑: 如果我执行以下操作,label1 会由于跨线程操作尝试(UI 线程中的 label1)而引发 InvalidOperationException。
private void Form1_Load(object sender, EventArgs e)
{
var t = Task.Factory.StartNew(() => Engine());
t.Start();
}
private void Engine()
{
while (true)
{
Thread.Sleep(1000);
Ticker ltcusd = BtceApi.GetTicker(BtcePair.LtcUsd);
label1.Text = "LTC/USD: " + ltcusd.Last;
}
}