[VS.NET 2003]
Salut les amis !
J'ai un petit soucis dans un service: je souhaite pouvoir utiliser une MessageBox (ou équivalent) sans bloquer la suite des traitements du service (on attend pas forcément d'action de l'utilisateur)
Voici ce que j'ai en gros:
Actuellement je dois fermer la messagebox pour que le service puisse continuer et écrire dans le fichier...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 Imports System.ServiceProcess Imports System.Timers Imports System.windows.forms Imports System.IO Public Class ServiceImpression Inherits System.ServiceProcess.ServiceBase Private WithEvents m_Minuterie As System.Timers.Timer Private fichier As StreamWriter #Region " Code généré par le Concepteur de composants " Public Sub New() MyBase.New() ' Cet appel est requis par le Concepteur de composants. InitializeComponent() ' Ajoutez une initialisation quelconque après l'appel InitializeComponent() End Sub 'La méthode substituée Dispose du UserService pour nettoyer la liste des composants. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub ' Le point d'entrée principal pour le processus <MTAThread()> _ Shared Sub Main() Dim ServicesToRun() As System.ServiceProcess.ServiceBase ' Plusieurs services NT s'exécutent dans le même processus. Pour ajouter ' un autre service à ce processus, modifiez la ligne suivante ' pour créer un second objet service. Par exemple, ' ' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService} ' ServicesToRun = New System.ServiceProcess.ServiceBase() {New ServiceImpression} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub 'Requis par le Concepteur de composants Private components As System.ComponentModel.IContainer ' REMARQUE*: la procédure suivante est requise par le Concepteur de composants ' Elle peut être modifiée à l'aide du Concepteur de composants. ' Ne la modifiez pas en utilisant l'éditeur de code. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() components = New System.ComponentModel.Container Me.ServiceName = "Service1" End Sub #End Region Protected Overrides Sub OnStart(ByVal args() As String) ' Ajoutez ici le code pour démarrer votre service. Cette méthode doit permettre à votre ' service de faire son travail. LancerMinuterie() End Sub Private Sub LancerMinuterie() m_Minuterie = New System.Timers.Timer(15000) m_Minuterie.AutoReset = False m_Minuterie.Enabled = True End Sub Protected Overrides Sub OnStop() ' Ajoutez ici le code pour effectuer les destructions nécessaires à l'arrêt de votre service. End Sub Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs) Handles m_Minuterie.Elapsed Dim Str As String = " il est " & DateTime.Now.Hour & ":" & DateTime.Now.Minute & ":" & DateTime.Now.Second MessageBox.Show(Str, "Service", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) fichier = New StreamWriter("c:\partage\TESTSERVICE.txt", True) fichier.WriteLine(Str) fichier.Flush() fichier.Close() fichier = Nothing LancerMinuterie() End Sub End Class
J'ai pensé passer par la suite à passer par un autre exe indépendant (sous réserve qu'on puisse lancer une appli depuis un service sans trop de problèmes) qui se chargerait d'afficher les messages, ce qui ne me bloquerait pas le service et pouvoir toujours écrire dans le fichier, mais ça n'est pas vraiment génial...
Si quelqu'un a une idée...
D'avance merci !
Partager