[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:
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
Actuellement je dois fermer la messagebox pour que le service puisse continuer et écrire dans le fichier...
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 !