2010-01-10 4 views
0

J'ai une classe GUI et une classe de base de données. Je fais quelque chose comme:Options de journalisation avec BackgroundWorker dans VB.net

Dim db as Database = getDatabaseObject(logTxtBox) 
db.executeNonQuery("some update command here") 

Dans ExecuteNonQuery je me connecte à la DB, exécutez la commande, débrancher et attraper les exceptions. logTxtBox est la boîte txt de l'interface graphique à laquelle je veux écrire les messages de journalisation. Actuellement, il écrit quelque chose comme:

Connected to DB successfully 
Executing "some update command here" 
Excepetion: ........ 
Disconnecting from DB 

Je pense que ce n'est pas la meilleure structure pour ma journalisation. Dès que je lance executeNonQuery avec un BackgroundWorker à la place du thread principal de l'interface graphique, je ne peux pas accéder au logTxtBox de l'interface graphique à partir du thread de BackgroundWorker.

Existe-t-il une meilleure façon d'implémenter ce type de fonctionnalité?

Action de grâce

Jonathan

Répondre

0

Pour utiliser un composant d'interface utilisateur à partir d'un fil de fond assurez-vous d'utiliser Control.Invoke() pour vous assurer que le code est exécuté dans le thread d'interface utilisateur.

est ici un code C# qui appelle une méthode sur le thread d'interface utilisateur et passe dans un paramètre:

this.Invoke(new Action<string>(MyMethod), "something to log"); 

    private void MyMethod(string logData) { 
     // set some text here 
    } 
0

Vous pouvez déclencher des événements à l'intérieur de votre classe de base de données d'une poignée de ces événements dans l'interface utilisateur. Par exemple, vous pouvez créer un événement "StatusChanged" personnalisé et passer l'état actuel dans les eventargs.