c#到处更新LED组件
我有一个与简单任务相关的问题:从名称空间中的任何类更新控件状态。 详细地说,我编写了一个GUI,它可以从listbox打开不同的表单(每行打开一个不同的表单)。在某些情况下,调用的表单必须从SQL数据库检索数据,在这种情况下,我想插入两个自定义控件(LED),以便在系统检索数据(红色LED)或准备就绪(绿色LED)时向用户发出信号 基本上,结果是我无法在表单加载期间更新这些控件,我注意到backgroundworker是一种很好的方法,但不确定它是否正确c#到处更新LED组件,c#,sql,multithreading,user-interface,C#,Sql,Multithreading,User Interface,我有一个与简单任务相关的问题:从名称空间中的任何类更新控件状态。 详细地说,我编写了一个GUI,它可以从listbox打开不同的表单(每行打开一个不同的表单)。在某些情况下,调用的表单必须从SQL数据库检索数据,在这种情况下,我想插入两个自定义控件(LED),以便在系统检索数据(红色LED)或准备就绪(绿色LED)时向用户发出信号 基本上,结果是我无法在表单加载期间更新这些控件,我注意到backgroundworker是一种很好的方法,但不确定它是否正确 您知道如何管理它吗?是的,您需要使用Ba
您知道如何管理它吗?是的,您需要使用
BackgroundWorker
或其他异步操作。如果您在FormLoad
期间执行逻辑,这是一个同步操作,那么无论发生什么,您都不会在表单中看到任何更新
例如,对于后台工作人员:
BackgroundWorker bw;
private void Form1_Load(object sender, EventArgs e)
{
bw = new BackgroundWorker();
bw.WorkerReportsProgress = true; //allows call backs
bw.DoWork += bw_DoWork;
bw.ProgressChanged += bw_ProgressChanged;
bw.RunWorkerAsync(); //run the worker
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var message = e.UserState;
//do something with the UserState on the UI, like flash a light
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker localBW = (BackgroundWorker)sender;
//do your logic here, when you want to "report progress"
//use the following lines
localBW.ReportProgress(0, "hey, flash please"); // or something else
//when you are all done, you can pass something back
e.Result = "I'm done now";
}
有关更多阅读,请参阅、a和。您是在说WinForms吗?WPF?还有别的吗?通常,您应该能够在表单加载事件期间更新控件。您遇到了什么具体问题?非常感谢您的回复。我的注意力集中在您的句子上:如果您在FormLoad期间执行逻辑,这是一个同步操作,那么无论发生什么,您都不会在表单中看到任何更新。您的意思是在表单加载期间无法更新控件吗?首先,在
FormLoad
中执行的任何操作都将在表单显示给用户之前发生。第二,假设您创建了一个按钮处理程序方法。单击按钮,该按钮在一行中运行以下3项:1-将文本显示到标签,2-等待3秒,3-显示其他文本。由于同步操作的工作方式,您将看不到第一个标签文本。你需要使它异步才能工作。非常清楚,事实上我失去了第一个状态。因此,如果我理解正确,我需要在加载表单之前点亮红色led(忙碌状态)(在SelectIndexChanged是否正常?),等待加载结束,然后点亮绿色led(就绪状态)?我说得对吗?非常感谢您的帮助我会在后台工作人员完成(运行RunWorkerCompleted
事件)后打开绿灯。否则听起来不错,试试看!