我有以下问题,我必须编写一个程序来检查 X 事物是否处于活动状态,查询数据库并以表格形式显示它们。
或多或少是这样的。
注意:我省略了代码的某些部分,因为我认为它们对于理解代码或解决问题不是必需的。
_____________________________________
|_____________________________________|
| Algo | Estado = activo |
| Otra cosa | Estado = Pausado |
| Y algo | Estado = Suspendido |
|____ ______ ____________ ____________|
问题是我想从不同类中的线程控制以这种形式出现的状态,即,除此之外程序将做更多的事情,我有兴趣将它按类和其他划分.
当我必须从线程访问它时就会出现问题,线程本身就是一个静态方法。这是我的想法,我附上两个类的例子。
public partial class Form1 : Form {
{
public Form1(){
InitializeComponent();
}
private void controlItem_Click(object sender, EventArgs e){
//Iniciamos el hilo padre.
Thread principal = new Thread(Hilos.mainthread);
principal.Start();
}
}
class Hilos
{
static MySqlConnection conn;
private Boolean error;
public static void mainthread() {
//Creamos la conexión con la BBDD
string myConnectionString = "server=xx.xx.xx.xx;uid=xxxxx;" +
"pwd=xxxxxx*;database=xxxxxx";
//Intentamos la conexión
conn = new MySql.Data.MySqlClient.MySqlConnection();
conn.ConnectionString = myConnectionString;
conn.Open();
data=//Aquí iría una consulta MySQL
if(data==xxxx){
//Lo que quiero hacer es Form1.textbox1.text=Activo
//Evento o algo para hacer que funcione
}else if(data==yyyy){
//Lo que quiero hacer es Form1.textbox1.text=Suspendido
//Evento o algo para hacer que funcione
}else{
//Lo que quiero hacer es Form1.textbox1.text=Pausado
//Evento o algo para hacer que funcione
}
}
}
所以,一旦代码暴露出来,我想知道的是,我怎样才能使它在满足其中一个条件时,启动一个事件或什么(我仍然不知道事件),以便更改相应的文本框。
尽管有一些方法可以按照您的要求以及如何要求,但建议的模式是不要在执行数据库查询的方法中执行任何 UI 工作。
相反,最好划分职责,以便与数据库一起使用的方法只返回一个值,然后由使用者负责分配给 UI 中的控件。
我假设您希望使用线程进行数据库工作是为了在执行查询时 UI 线程处于空闲状态。如果是这种情况,那么今天建议将 a
Task
与 结合使用,而不是直接使用线程async/await
。以下是如何构建它的示例:
还值得一提的是,根据您用于查询数据库的库,它可能已经包含异步方法。如果是这种情况,则
Task
.首先,我添加了一个具有状态和名称属性的类,以便能够识别进程是什么,以防在调试时需要它。
在同一个线程中,我创建了对象
Estado xxxx = new Estado("Nombre del programa a monitorizar")
然后,在 la
Class hilos
我创建状态类型对象。作为公共对象,我可以从我简单的 Form1 类中使用它。