Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#到处更新LED组件_C#_Sql_Multithreading_User Interface - Fatal编程技术网

c#到处更新LED组件

c#到处更新LED组件,c#,sql,multithreading,user-interface,C#,Sql,Multithreading,User Interface,我有一个与简单任务相关的问题:从名称空间中的任何类更新控件状态。 详细地说,我编写了一个GUI,它可以从listbox打开不同的表单(每行打开一个不同的表单)。在某些情况下,调用的表单必须从SQL数据库检索数据,在这种情况下,我想插入两个自定义控件(LED),以便在系统检索数据(红色LED)或准备就绪(绿色LED)时向用户发出信号 基本上,结果是我无法在表单加载期间更新这些控件,我注意到backgroundworker是一种很好的方法,但不确定它是否正确 您知道如何管理它吗?是的,您需要使用Ba

我有一个与简单任务相关的问题:从名称空间中的任何类更新控件状态。 详细地说,我编写了一个GUI,它可以从listbox打开不同的表单(每行打开一个不同的表单)。在某些情况下,调用的表单必须从SQL数据库检索数据,在这种情况下,我想插入两个自定义控件(LED),以便在系统检索数据(红色LED)或准备就绪(绿色LED)时向用户发出信号

基本上,结果是我无法在表单加载期间更新这些控件,我注意到backgroundworker是一种很好的方法,但不确定它是否正确


您知道如何管理它吗?

是的,您需要使用
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
事件)后打开绿灯。否则听起来不错,试试看!