C# 获取后台任务以不断更新文本框
我对这一切都很陌生,所以请容忍我!我正在写一个小程序来控制我的望远镜,现在我可以连接到它并告诉它指向哪里。我想有两个文本框,或者标签,它们会随着望远镜的位置不断更新-C# 获取后台任务以不断更新文本框,c#,.net,backgroundworker,C#,.net,Backgroundworker,我对这一切都很陌生,所以请容忍我!我正在写一个小程序来控制我的望远镜,现在我可以连接到它并告诉它指向哪里。我想有两个文本框,或者标签,它们会随着望远镜的位置不断更新-T是望远镜的目标,我要调用T.altime,T.aziration,T.rightsception和T.Declination,我希望这些值每隔半秒左右更新四个标签。我假设我需要使用后台工作人员,但我说的对吗?既然望远镜物体是在主线程上创建的,我能访问它吗?我到底是怎么做到的!这就是我到目前为止所拥有的(而且并不多!) 在你的情况下
T
是望远镜的目标,我要调用T.altime
,T.aziration
,T.rightsception
和T.Declination
,我希望这些值每隔半秒左右更新四个标签。我假设我需要使用后台工作人员,但我说的对吗?既然望远镜物体是在主线程上创建的,我能访问它吗?我到底是怎么做到的!这就是我到目前为止所拥有的(而且并不多!)
在你的情况下,你应该考虑使用一个定时器类。这些类在指定的时间间隔内调用给定的委托 Windows.Forms命名空间中的Timer类调用UI线程中的委托,因此您不必为分派或任何事情而烦恼,但如果您调用太频繁,则可能会降低UI的响应速度
其他计时器使用单独的线程,因此您需要使用Dispatcher对象或SynchronizationContext对象来修改UI值。您可以阅读更多有关msdn的信息。最简单的方法可能是建议使用一个工具,使用望远镜(对象)的当前值定期更新Gui 另一方面,在C#5.0中,后台工作程序有点过时,因为使用async/await更容易(请参阅) 下面是WinForms中的一个示例实现,它每500毫秒刷新一组标签
public partial class MyForm : Form
{
private readonly Timer _timer = new Timer();
public MyForm()
{
InitializeComponent();
_timer.Interval = 500;
_timer.Tick += TimerTick;
_timer.Enabled = true;
}
void TimerTick(object sender, EventArgs e)
{
_labelAzimuth.Text = T.Azimuth.ToString();
_labelAltitude.Text = T.Altitude.ToString();
_labelDeclination.Text = T.Declination.ToString();
_labelRightAscension.Text = T.RightAscension.ToString();
}
}
你可以找到一个关于BackgroundWorker的好教程。希望这有帮助。
public partial class MyForm : Form
{
private readonly Timer _timer = new Timer();
public MyForm()
{
InitializeComponent();
_timer.Interval = 500;
_timer.Tick += TimerTick;
_timer.Enabled = true;
}
void TimerTick(object sender, EventArgs e)
{
_labelAzimuth.Text = T.Azimuth.ToString();
_labelAltitude.Text = T.Altitude.ToString();
_labelDeclination.Text = T.Declination.ToString();
_labelRightAscension.Text = T.RightAscension.ToString();
}
}