Bonjour

Dans mon programme j'utilise plusieurs thread et depuis peu j'ai ce curieux message de temps en temps et le programme s'arrête sans donné de numéro de ligne. Il suffit parfois de valider en cliquant sur continuer pour que le programme reprenne la main.

Le message : "Assistant Débogage managé 'ContextSwitchDeadlock' *: 'Le CLR n'a pas pu effectuer de transition du contexte COM 0x1028fe8 au contexte COM 0x1028f30 pendant 60 secondes. Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.'"

Ce qui est curieux : les 60 secondes dont il est question dans le commentaire ? Faut-il régler un paramètre de VB.net ?

A toute fin utile je vous donne des extraits du code appelant les threads qui semble-t'il doivent être complété. Oui mais par quoi ?

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
Option Explicit On
 
Imports System.Threading
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Text.RegularExpressions
 
'............'.
 
Public Class Form1
 
    <DllImport("user32.dll")>
    Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
    End Function 'pour positionner la fenêtre de pywin64.exe
    <DllImport("user32.dll")>
    Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal windowName As String) As Boolean
    End Function 'pour changer le titre de la fenêtre de pywin64.exe
 
'...........'.
 
 Public Sub StartResolution()
 
        If tTask1 IsNot Nothing Then tTask1 = Nothing
        tTask1 = New System.Threading.Thread(AddressOf Task1)
        tTask1.IsBackground = True
        tTask1.Start()
 
    End Sub
 
'...........'.
 
 Public Sub Task1()
        Try
 
            Using myProcess2 As New Process
 
                myProcess2.StartInfo.FileName = Disk + "\notepad.exe"
 
                If ValidAutoSolution = True Then
                    myProcess2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
                Else
                    myProcess2.StartInfo.WindowStyle = ProcessWindowStyle.Normal
                End If
                myProcess2.Start() 'start process exe
                Thread.Sleep(50)
 
                'dimensionne la fenêtre cmd sous windows :
 
                SetWindowPos(myProcess2.MainWindowHandle, IntPtr.Zero, 1201, 0, 720, 1000, 0)
 
            End Using
        Catch ex As Exception
        End Try
 
    End Sub
 
 
'.........'.
 
 Private Function KillProcess(ByVal ProcessName As String) As Boolean
 
        Try
            Dim svc As Object
            Dim sQuery As String
            Dim oproc
            svc = GetObject("winmgmts:root\cimv2")
            sQuery = "select * from win32_process where name='" & ProcessName & "'"
            For Each oproc In svc.execquery(sQuery)
                Dim v = oproc.Terminate
            Next
            'svc = Nothing
        Catch ex As Exception
        End Try
 
 
    End Function
Merci d'avance pour votre aide et idées.

A+