Exécution d'un fichier avec backgroundworker

Résolu
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 - 1 avril 2007 à 19:58
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 - 2 avril 2007 à 20:51
Salut,

Voilà, je programmes avec Visual Studio 2005 (VB.NET) et j'ai un souci avec le BackGroundWorker. En effet, pendant qu'il travaille, je veux exécuter un script avec Shell (je veux attendre la fin d'exécution du script avant de continuer) mais il me dit qu'il ne trouve pas le programme alors qu'en dehors du BackGroundWorker, il l'exécute très bien.

Je vous mets le code pour que vous voyez plus clair :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     BackgroundWorker1.RunWorkerAsync()
End Sub

<table border="0">----, Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Treatment()
End Sub

Private Function Treatment() As Long
    Shell(My.Application.Info.DirectoryPath + \"\Ressource\memoire.vbs\", AppWinStyle.Hide, True)
    BackgroundWorker1.CancelAsync()
End Function</td>----

(Coloration syntaxique automatique par Kenji)
</td></tr><tr><td colspan="2">
</td></tr></tbody></table>Juste après le Shell (qui attends la fin de l'exécution du script pour continuer), j'arrête le BackGroundWorker. Est ce que vous savez pourquoi je peux pas accéder au script dans la fonction Treatment() et est ce que vous aurez une solution pour y parvenir ?

Merci

7 réponses

cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
1 avril 2007 à 22:45
Salut,

Merci de m'avoir répondu hvb mais je viens tout juste de trouver la solution :

Dim monprocess As New Process

monprocess.StartInfo.FileName = My.Application.Info.DirectoryPath + "\Ressource\memoire.vbs"
monprocess.Start()

Et c'est deux lignes exécutent mon script sans geler l'interface

Merci encore une fois de m'avoir répondu hvb

@+
3
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
1 avril 2007 à 22:40
c'est un probleme de chemin, stocke le plutot dans une variable et passe le en argument à ton backgroundworker.

Hvb aka Batto
bato.ltd at gmail.com
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
1 avril 2007 à 23:07
j'allais te demander pourquoi tu passais par un shell plutot que les methodes proposée dans le framework.
En tout cas je pense que cela venait surement du fait que My.Application ne puisse etre appelé dans un thread.
Enfin, dans ton cas, pourquoi passer par le chemin absolu alors que tes ressources sont dans un sous repertoire du repertoire de l'application..?
Le chemin relatif suffirait : monprocess.StartInfo.FileName = "Ressources\memoire.vbs"
non?

Hvb aka Batto
bato.ltd at gmail.com
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
1 avril 2007 à 23:11
Salut,

J'ai déja essayé avec Shell, c'était ma première solution mais l'interface gelait et je n'ai pas reussi à contourner ce problème j'ai donc trouvé avec monprocess. Sinon, j'ai testé
monprocess.StartInfo.FileName = "Ressources\memoire.vbs" et effectivement ca marche très bien, ca fait un peu moins de code.

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
2 avril 2007 à 10:41
Bonjour

Remarque :
évite : My.Application.Info.DirectoryPath + "\Ressource\memoire.vbs"
met plutot : io.path.combine(My.Application.Info.DirectoryPath , "\Ressource\memoire.vbs")

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
2 avril 2007 à 10:41
Bonjour

Remarque :
évite : My.Application.Info.DirectoryPath + "\Ressource\memoire.vbs"
met plutot : io.path.combine(My.Application.Info.DirectoryPath , "Ressource\memoire.vbs")

Il est plus facile de batiser quelqu'un que de le convertir.(surtout en programmation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
2 avril 2007 à 20:51
sur une saisie utilisateur je comprend l'utilité de path.combine, mais la pour une information "en dur", pourquoi preferer cette méthode?
prendre l'habitude peut-être...

Hvb aka Batto
bato.ltd at gmail.com
0
Rejoignez-nous