Threads

  • VB.NET
  • .NET (FX) 4.0

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    @RodFromGermany jetzt hab ich so schön für jeden Drucker, Timer einen Thread gebastelt, warum wieder rausschmeißen? Ich will ja nicht das das Programm einfriert wärend er die PDF´s zum Drucker sendet.
    Wie kann ich das verstehen?

    Blackn0va schrieb:

    Wie kann ich das verstehen?
    Wenn Dein Code in Post #1 Dein gesamter Thread-Code ist, verfahre so, wie ich es Dir geschrieben habe.
    Wenn Du noch weitere Threads hast, solltest Du etwas mehr Code sehen lassen, damit wir sehen können, was tatsächlich so in Deinen Threads passiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist so: für mein Verständnis (habe es nicht geprüft) verursachen eig alle Methoden oder Funktionen wären sie ausgeführt werden ein freeze, deswegen meine ich, alles in Threads zu packen?
    Wird wohl nicht so ganz stimmen :)

    ich hab hab einfach noch einen winzigen Thread gemacht, der einfach nur den Timer1.start() startet

    Blackn0va schrieb:

    der einfach nur den Timer1.start() startet
    Falls das ein Windows.Forms.Timer ist, ist das nicht sinnvoll, denn dieser Timer arbeitet im GUI-Thread.
    Wenn Du einen Timer benötigst, der in einem anderen Thread arbeitet, verwende einen System.Threading.Timer, den kannst Du im GUI-Thread starten, aber seine Tick-Events kommen in einem anderen Thread.
    Poste mal solch Prozeduren, die die GUI anhalten, dann werden wir sehen, wie das zu lösen ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab mal den ganzen code in eine Form ohne namen gepack^

    also wenn man nun eine IP von einem Netzwerkdrucker eingibt, das programm startet, läuft das meiner meinung nach rund, weil die 3 Drucker je ein Tread sind.
    Einfrieren tut es dann, wenn man die Threads wieder raus nimmt und wieder eine einfache Prozedur macht für das Print Object.

    Sobald s.sendfile ausgeführt wird ist das Programm eingefroren bis ale dateien gesendet wurden oder ein Excaption auftritt.

    Ich ziehe daraus, das die Form1 , oder die Hauptform schon ein Tread ist, das wusste ich nicht - obwohl es logisch ist wenn man den kopf anmacht.
    Ein Thread in Thread macht dann also kein sinn. Bedeutet ich mache 3 klasse und die klassen sind die DruckerThreads, und rufe diese in der Hauptform auf?


    Die RichTextBox hab ich jetzt vergessen zu löschen, das hab ich gefüllt anstatt alles an den drucker zu senden (bin nicht im Büro:) )
    Dateien
    • Print-Com.rar

      (19,51 kB, 92 mal heruntergeladen, zuletzt: )
    @Blackn0va Was Du da machst ist Tinnef.
    Du startest einen Thread, und das erste, was Du machst, ist, soforz in den MainThread zu invoken.

    VB.NET-Quellcode

    1. Dim DruckerRFPThread As New Threading.Thread(AddressOf DruckerRFP)
    2. ' ...
    3. Private Sub DruckerRFP()
    4. If Me.InvokeRequired Then
    5. Me.Invoke(Sub() Me.DruckerRFP())
    6. Return
    7. End If
    Timer1 ist ein Windows.Forms.Timer, siehe oben.
    Fang an und gib Deinem Projekt Option Strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Blackn0va schrieb:

    startet bei mir nichts mehr
    Völlig korrekt, denn es sind ja Fehler, die Du zunächst fixen musst.
    Für einen cboDrucker_DrawItem() hab ich Dir übrigens in Deinem letzten Thread den korrekten Code gepostet. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Verstehe ^,
    also läuft soweit wieder, nur hab ich in der ComboBox jeweils den Anfangsbuchstaben

    Edit:
    jetzt läuft es wieder, nun wieder zu den Threads :)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Drawing.Printing
    2. Imports System.IO
    3. Imports System.Net.Sockets
    4. Imports System.Windows
    5. Imports System.Threading
    6. ''' <summary>
    7. ''' *** Ein Programm, mithilfe man per DragAnd Drop oder OpenfileDialog bis zu 65.000 PDF´s an einen Drucker Senden kann ***
    8. ''' </summary>
    9. Public Class Form1
    10. Dim retval As DialogResult
    11. '*** 3 Threads deklarueren ***
    12. Private DruckerHPFThread As Thread
    13. Private DruckerNY77Thread As Thread
    14. Private DruckerRFPThread As Thread
    15. Private ProgressBarThread As Thread
    16. ''' <summary>
    17. ''' *** Drucken ***
    18. ''' </summary>
    19. ''' <param name="sender"></param>
    20. ''' <param name="e"></param>
    21. Private Sub cmdDrucken_Click(sender As Object, e As EventArgs) Handles cmdDrucken.Click
    22. '*** MEssagebox mit einer returnValue ***
    23. retval = MessageBox.Show("Möchten Sie wirklich Drucken?", "Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    24. '*** Wennn in der Messsagebox Ja geklickt wurde dann.... ***
    25. If retval = vbYes And cboDrucker.SelectedIndex > 0 And ListBox1.Items.Count > 0 Then
    26. '*** Wenn Index 0 gewählt dann Ignorieren, wennn index größer 0 Dann Drucken ***
    27. If cboDrucker.SelectedIndex = 0 Then
    28. '*** RFP ***
    29. ElseIf cboDrucker.SelectedIndex = 1 Then
    30. '*** RFP Backoffice ***
    31. '*** Dem Thread seine Sub zuweisen ***
    32. Dim DruckerRFPThread As New Threading.Thread(AddressOf DruckerRFP)
    33. Dim ProgressBarThread As New Threading.Thread(AddressOf ProgressBar)
    34. DruckerRFPThread.IsBackground = True
    35. DruckerRFPThread.Priority = Threading.ThreadPriority.Normal
    36. DruckerRFPThread.Start()
    37. ProgressBarThread.IsBackground = True
    38. ProgressBarThread.Priority = Threading.ThreadPriority.Normal
    39. ProgressBarThread.Start()
    40. System.Threading.Thread.Sleep(200)
    41. '*** NY77 ***
    42. ElseIf cboDrucker.SelectedIndex = 2 Then
    43. '*** NY77 Backoffice ***
    44. '*** Dem Thread seine Sub zuweisen ***
    45. Dim DruckerNY77Thread As New Threading.Thread(AddressOf DruckerNY77)
    46. Dim ProgressBarThread As New Threading.Thread(AddressOf ProgressBar)
    47. DruckerNY77Thread.IsBackground = True
    48. DruckerNY77Thread.Priority = Threading.ThreadPriority.Normal
    49. DruckerNY77Thread.Start()
    50. ProgressBarThread.IsBackground = True
    51. ProgressBarThread.Priority = Threading.ThreadPriority.Normal
    52. ProgressBarThread.Start()
    53. System.Threading.Thread.Sleep(200)
    54. '*** HPF ***
    55. ElseIf cboDrucker.SelectedIndex = 3 Then
    56. '*** Dem Thread seine Sub zuweisen ***
    57. Dim DruckerHPFThread As New Threading.Thread(AddressOf DruckerHPF)
    58. Dim ProgressBarThread As New Threading.Thread(AddressOf ProgressBar)
    59. DruckerHPFThread.IsBackground = True
    60. DruckerHPFThread.Priority = Threading.ThreadPriority.Normal
    61. DruckerHPFThread.Start()
    62. ProgressBarThread.IsBackground = True
    63. ProgressBarThread.Priority = Threading.ThreadPriority.Normal
    64. ProgressBarThread.Start()
    65. System.Threading.Thread.Sleep(200)
    66. End If
    67. '** Textfeld nach abschiocken an den Drucker wieder leeren ***
    68. Else
    69. MessageBox.Show("Bitte Wählen Sie einen Drucker aus und fügen Sie eine PDF hinzu.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information)
    70. End If
    71. End Sub
    72. '*** HPF Backoffice ***
    73. Private Sub DruckerHPF()
    74. If Me.InvokeRequired Then
    75. Me.Invoke(Sub() Me.DruckerHPF())
    76. Return
    77. End If
    78. '** Deklaration eines Druckers im Lokalem netzwerk ***
    79. Using s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    80. For Each zeile As String In Me.ListBox1.Items
    81. s.Connect("IP VOM DRUCKER", 9100)
    82. '*** Senden e ines Srings an den Drucker ****
    83. s.SendFile(zeile)
    84. Next
    85. Me.ListBox1.Items.Clear()
    86. End Using
    87. End Sub
    88. '*** RFP Backoffice Thread ***
    89. Private Sub DruckerRFP()
    90. If Me.InvokeRequired Then
    91. Me.Invoke(Sub() Me.DruckerRFP())
    92. Return
    93. End If
    94. '** Deklaration eines Druckers im Lokalem netzwerk ***
    95. Using s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    96. For Each zeile As String In Me.ListBox1.Items
    97. s.Connect("IP VOM DRUCKER", 9100)
    98. '*** Senden e ines Srings an den Drucker ****
    99. s.SendFile(zeile)
    100. Next
    101. Me.ListBox1.Items.Clear()
    102. End Using
    103. End Sub
    104. '*** NY77 Backoffice Thread ***
    105. Private Sub DruckerNY77()
    106. If Me.InvokeRequired Then
    107. Me.Invoke(Sub() Me.DruckerNY77())
    108. Return
    109. End If
    110. '** Deklaration eines Druckers im Lokalem netzwerk ***
    111. Using s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    112. For Each zeile As String In Me.ListBox1.Items
    113. s.Connect("IP VOM DRUCKER", 9100)
    114. '*** Senden e ines Srings an den Drucker ****
    115. s.SendFile(zeile)
    116. Next
    117. Me.ListBox1.Items.Clear()
    118. End Using
    119. End Sub
    120. '*** Thread für die Progressbar die den Timer startet ***
    121. Private Sub ProgressBar()
    122. If Me.InvokeRequired Then
    123. Me.Invoke(Sub() Me.ProgressBar())
    124. Return
    125. End If
    126. Timer1.Start()
    127. End Sub
    128. '*** Fertige Methoden ***
    129. ''' <summary>
    130. ''' '*** Load ereignis ListBox Füllen, Timer Starten ***
    131. ''' </summary>
    132. ''' <param name="sender"></param>
    133. ''' <param name="e"></param>
    134. Private Sub PDFPrint_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    135. ''*** cboBox Befüllen ***
    136. cboDrucker.SelectedIndex = 0
    137. cboDrucker.DrawMode = DrawMode.OwnerDrawFixed
    138. '*** Timer2 Starten ***
    139. Timer2.Start()
    140. End Sub
    141. ''' <summary>
    142. ''' *** Dateien Hinzufügen ***
    143. ''' </summary>
    144. ''' <param name="sender"></param>
    145. ''' <param name="e"></param>
    146. Private Sub cmdAddFiles_Click(sender As Object, e As EventArgs) Handles cmdAddFiles.Click
    147. Dim OpenFileDialog1 As New OpenFileDialog
    148. '*** Multiselect Aktivieren ***
    149. OpenFileDialog1.Multiselect = True
    150. '*** Filter der Dialogbox ***
    151. OpenFileDialog1.InitialDirectory = (Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop))
    152. OpenFileDialog1.FileName = ""
    153. '*** Wir möchten bitte nur PDF´s sehen ***
    154. OpenFileDialog1.Filter = "PDF (*.pdf)|*.pdf|PDF (*.PDF)|*.PDF"
    155. OpenFileDialog1.FilterIndex = 2
    156. OpenFileDialog1.RestoreDirectory = True
    157. '*** FileDialog anzeigen ***
    158. ' OpenFileDialog1.ShowDialog()
    159. Dim result = OpenFileDialog1.ShowDialog()
    160. If result = DialogResult.OK Then
    161. '*** Für jede Datei einen Pfad in die Richtextbox schreiben ***
    162. For Each b As String In OpenFileDialog1.FileNames
    163. '*** Gibt jeweils eine Zeile in der txtxBox aus ***
    164. ListBox1.Items.Add(b)
    165. Next
    166. Else
    167. End If
    168. End Sub
    169. ''' <summary>
    170. ''' *** Drag and Drop Aktivieren ***
    171. ''' </summary>
    172. ''' <param name="sender"></param>
    173. ''' <param name="e"></param>
    174. Private Sub ListBox1_DragDrop(sender As Object, e As DragEventArgs) Handles ListBox1.DragDrop
    175. '*** Nur PDF´S erlauben bei Drag and Drop***
    176. Dim s() As String = CType(e.Data.GetData("FileDrop", False), String())
    177. For i = 0 To s.Length - 1
    178. If s(i).ToLower().EndsWith(".pdf") Then
    179. ListBox1.Items.Add(s(i))
    180. End If
    181. Next i
    182. End Sub
    183. ''' <summary>
    184. ''' *** Drag and Drop enable und Effekt ***
    185. ''' </summary>
    186. ''' <param name="sender"></param>
    187. ''' <param name="e"></param>
    188. Private Sub ListBox1_DragEnter(sender As Object, e As DragEventArgs) Handles ListBox1.DragEnter
    189. If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
    190. e.Effect = DragDropEffects.All
    191. Else
    192. e.Effect = DragDropEffects.None
    193. End If
    194. End Sub
    195. ''' <summary>
    196. ''' *** Timer für die PrGBar ***
    197. ''' </summary>
    198. ''' <param name="sender"></param>
    199. ''' <param name="e"></param>
    200. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    201. '*** Progressbar Value erhöhen um jeweils 1 ***
    202. prgBar.Increment(1)
    203. '*** Wenn Value der ProgressBar 100 erreicht, dann Meldung ausgeben und dateien schicken ***
    204. If prgBar.Value = 100 Then
    205. '*** Timer stoppen ***
    206. Timer1.Stop()
    207. '*** Hinweis das alle dateien an den Drucker gesendet wurden ****
    208. MessageBox.Show("Die Dateien wurden gedruckt.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information)
    209. '*** Value zurücksetzen ***
    210. prgBar.Value = 0
    211. End If
    212. '*** Prozentangabe im label ***
    213. lblStatus.Text = prgBar.Value & (" %")
    214. End Sub
    215. ''' <summary>
    216. ''' *** Bei DoppelKlick Markierten eintrag Öffnen ***
    217. ''' </summary>
    218. ''' <param name="sender"></param>
    219. ''' <param name="e"></param>
    220. Private Sub ListBox1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseDoubleClick
    221. If ListBox1.SelectedItem Is Nothing = False Then
    222. '*** Ausgewählten index Starten in AdobeReader ***
    223. Process.Start(ListBox1.SelectedItem.ToString())
    224. End If
    225. End Sub
    226. ''' <summary>
    227. ''' *** Der Zähler für die Anzahl der ListBox einträge ***
    228. ''' </summary>
    229. ''' <param name="sender"></param>
    230. ''' <param name="e"></param>
    231. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    232. '*** Items in der listbox zählen und Ausgeben ***
    233. Dim zähler As Integer = 0
    234. zähler = ListBox1.Items.Count
    235. cmdDrucken.Text = zähler.ToString() + " Dateien Drucken"
    236. If zähler = 0 Then
    237. cmdDrucken.Enabled = False
    238. cmdLeeren.Enabled = False
    239. Else
    240. cmdDrucken.Enabled = True
    241. cmdLeeren.Enabled = True
    242. End If
    243. End Sub
    244. ''' <summary>
    245. ''' *** Form Closing and Close - Müll einsammeln ***
    246. ''' </summary>
    247. ''' <param name="sender"></param>
    248. ''' <param name="e"></param>
    249. Private Sub PDFPrint_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
    250. '*** Wir sammeln den Müll ein ***
    251. GC.Collect()
    252. End Sub
    253. ''' <summary>
    254. ''' *** Müll wegbringen ***
    255. ''' </summary>
    256. ''' <param name="sender"></param>
    257. ''' <param name="e"></param>
    258. Private Sub PDFPrint_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    259. '*** Wir sammeln den Müll ein ***
    260. GC.Collect()
    261. End Sub
    262. ''' <summary>
    263. ''' *** Müll wegbringen ***
    264. ''' </summary>
    265. ''' <param name="sender"></param>
    266. ''' <param name="e"></param>
    267. Private Sub cmdLeeren_Click(sender As Object, e As EventArgs) Handles cmdLeeren.Click
    268. '*** Textfeld leeren ***
    269. ListBox1.Items.Clear()
    270. '*** Wir bringen den Müll raus ***
    271. GC.Collect()
    272. End Sub
    273. ''' <summary>
    274. ''' *** Farblicher Effekt bei dem Drucker ***
    275. ''' </summary>
    276. ''' <param name="sender"></param>
    277. ''' <param name="e"></param>
    278. Private Sub cboDrucker_DrawItem(sender As Object, e As DrawItemEventArgs) Handles cboDrucker.DrawItem
    279. '*** VAriablendeklaration ***
    280. Dim sItem As String = CStr(cboDrucker.Items(e.Index))
    281. Dim b As New SolidBrush(Color.Black)
    282. Select Case e.Index
    283. Case 0
    284. b = New SolidBrush(Color.Red)
    285. Case 1
    286. b = New SolidBrush(Color.Black)
    287. Case 2
    288. b = New SolidBrush(Color.Black)
    289. Case 3
    290. b = New SolidBrush(Color.Black)
    291. End Select
    292. e.DrawBackground()
    293. e.Graphics.DrawString(sItem, e.Font, b, e.Bounds.X, e.Bounds.Y)
    294. e.DrawFocusRectangle()
    295. '*** Text ausgeben ***
    296. 'e.Graphics.DrawString(sender.items(e.Index), e.Font, b, e.Bounds.X, e.Bounds.Y)
    297. End Sub
    298. ''' <summary>
    299. ''' *** Bei Key Down Backspacce Taste Freischalten, wenn diese Gedrückt, dann mMarkierten eintrag löschen ***
    300. ''' </summary>
    301. ''' <param name="sender"></param>
    302. ''' <param name="e"></param>
    303. Private Sub ListBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListBox1.KeyDown
    304. If e.KeyCode = Keys.Back Then
    305. '*** Markiertes Item Löschen ***
    306. ListBox1.Items.Remove(ListBox1.SelectedItem)
    307. End If
    308. End Sub
    309. End Class


    ist das hier auch noch wichtig? hab ich gerade in einem Video gesehen..

    VB.NET-Quellcode

    1. Control.CheckForIllegalCrossThreadCalls = False

    Bilder
    • 2.JPG

      22,75 kB, 586×227, 115 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Blackn0va“ ()

    Blackn0va schrieb:

    ist das hier auch noch wichtig?
    Lass das einfach sein, das verleitet zu unsauberer Programmierung.

    Blackn0va schrieb:

    nur hab ich in der ComboBox jeweils den Anfangsbuchstaben
    Dein neuer Code bei mir nicht:

    ====================
    GC.Collect() sollte hier nicht erforderlich sein!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Morgen zusammen,

    also, der aktuelle stand ist, das die Anwendung eine PDF an den Drucker sendet, aber bei mehreren Dateien bekomme ich einen laufzeitfehler.

    VB.NET-Quellcode

    1. if s.connected = falste then
    2. s.close()

    ?
    Bilder
    • 2.JPG

      51,32 kB, 749×377, 102 mal angesehen
    Hallo

    Ist das nicht klar? Wenn du in einer Schleife das zweite mal durchgehst passiert das. Du musst ja entweder nur einmal connecten (ausserhalb des ForEach) oder die Connection vor nochmaligen durchlaufen schliessen.

    Grüße
    Sascha

    PS: Hat das noch was mit dem Thema zu tun?
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Blackn0va schrieb:

    Doch klar.. oh man ^

    Haha, ich kenn das. Oft verheddert man sich und sieht offensichtliches nicht obwohl man drei mal nachsieht. ;)

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    :D

    Aber jetzt, ich hab hier einen Code aus dem Internet Kopiert, das sind 2 Threads, einmal ein zähler der in einem Label ausgegeben wird von 0 - 1000 und der 2. Thread ist die ProgressBar 0 - 10000

    Ich glaube das ist ein gutes beispiel für den Falschen aufruf eines Threads, was Ihr ständig meint, oder?

    Wie wäre dann der Aufruf zu formulieren?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Threading
    3. Public Class Form1
    4. Dim aufgabe1 As System.Threading.Thread
    5. Dim aufgabe2 As System.Threading.Thread
    6. Private Sub zaehler()
    7. If Me.InvokeRequired Then
    8. Me.Invoke(Sub() Me.zaehler())
    9. End If
    10. Dim i As Integer = 0
    11. Do Until i = 1001
    12. lbl1.Text = CStr(i)
    13. i = i + 1
    14. Me.Refresh()
    15. Loop
    16. End Sub
    17. Private Sub pb()
    18. If Me.InvokeRequired Then
    19. Me.Invoke(Sub() Me.pb())
    20. End If
    21. Dim ii As Integer = 0
    22. Do Until ii = 10000
    23. ProgressBar1.Value = ii
    24. ii = ii + 1
    25. Loop
    26. End Sub
    27. Private Sub cmdAufgabe1_Click(sender As Object, e As EventArgs) Handles cmdAufgabe1.Click
    28. aufgabe1 = New System.Threading.Thread(AddressOf zaehler)
    29. aufgabe1.Start()
    30. End Sub
    31. Private Sub cmdAufgabe2_Click(sender As Object, e As EventArgs) Handles cmdAufgabe2.Click
    32. aufgabe2 = New System.Threading.Thread(AddressOf pb)
    33. aufgabe2.Start()
    34. End Sub
    35. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    36. Control.CheckForIllegalCrossThreadCalls = False
    37. End Sub
    38. End Class


    Denn hier werden die Threads schön sauber nacheinander abgearbeitet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blackn0va“ ()

    Blackn0va schrieb:

    CheckForIllegalCrossThreadCalls

    Gaaanz schlecht.

    Vorallem, Beispiel hin oder her, die Sinnhaftigkeit soll mir mal wer erklären.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja das hat sich schon so Böse gelesen :) aber das hatten wir gestern schon ^

    Edit:

    Aber die Frage für mich ist, wie muss ich die Threads nun aufrufen, damit sie auch als Threads behandelt werden und kein Illegaler aufruf stattfindet ^
    @Blackn0va Überlege Dir zunächst, was in Deinem Thread passieren soll, jedenfalls keine GUI-Interaktion, da knallt es nämlich.
    In Deinem Programm sehe ich keine Notwendigkeit, mit Threads zu arbeiten :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!