Haudi,
hab gerade ein Problem, ein Kollege hat mir bei einer Klasse geholfen, nur leider ist diese in C# und da ich wenig erfahrung habe mit Eventhandling, verstehe ich nicht, wie ich diese in VB.Net übersetzt bekomme.
C# - Code:
Spoiler anzeigen
Meine bisherigen Versuche sehen so aus: (Problemstellen sind kommentiert)
Spoiler anzeigen
Wäre wirklich cool wenn mir einer kurz helfen könnte und gegebenenfalls kurz erklären
Dankeschön
hab gerade ein Problem, ein Kollege hat mir bei einer Klasse geholfen, nur leider ist diese in C# und da ich wenig erfahrung habe mit Eventhandling, verstehe ich nicht, wie ich diese in VB.Net übersetzt bekomme.
C# - Code:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO.Ports;
- using System.Threading;
- using System.Windows.Forms;
- {
- Public Class ComHelper
- {
- public delegate void DetectedComPortEventHandler(object sender, ComPortDetectedEventArgs e);
- public delegate void ProgressEventHandler(object sender, ComHelperProgressChangedEventArgs e);
- public event ComHelper.DetectedComPortEventHandler DetectedComPort;
- public event ComHelper.ProgressEventHandler ProgressChanged;
- public int Range
- {
- get;
- set;
- }
- Public ComHelper()
- {
- this.Range = 100;
- }
- public ComHelper(int range)
- {
- this.Range = range;
- }
- public void Run()
- {
- Thread thread = new Thread(new ThreadStart(this.InternalRun));
- thread.Start();
- }
- private void InternalRun()
- {
- List<ComPort> list = new List<ComPort>();
- for (int i = 0; i <= this.Range; i++)
- {
- try
- {
- SerialPort serialPort = new SerialPort("COM" + i.ToString());
- serialPort.Open();
- serialPort.Close();
- list.Add(new ComPort(i));
- }
- catch
- {
- Debug.WriteLine("No rabbit on COM" + i.ToString());
- }
- if (this.ProgressChanged != null)
- {
- int percentage = 100 * i / this.Range;
- ComHelperProgressChangedEventArgs comHelperProgressChangedEventArgs = new ComHelperProgressChangedEventArgs(percentage);
- Delegate[] invocationList = this.ProgressChanged.GetInvocationList();
- for (int j = 0; j < invocationList.Length; j++)
- {
- ComHelper.ProgressEventHandler progressEventHandler = (ComHelper.ProgressEventHandler)invocationList[j];
- if (progressEventHandler.Target is Control && ((Control)progressEventHandler.Target).InvokeRequired)
- {
- ((Control)progressEventHandler.Target).Invoke(progressEventHandler, new object[]
- {
- this,
- comHelperProgressChangedEventArgs
- });
- }
- else
- {
- progressEventHandler(this, comHelperProgressChangedEventArgs);
- }
- }
- }
- }
- if (this.DetectedComPort != null)
- {
- ComPortDetectedEventArgs comPortDetectedEventArgs = new ComPortDetectedEventArgs(list.ToArray());
- Delegate[] invocationList = this.DetectedComPort.GetInvocationList();
- for (int j = 0; j < invocationList.Length; j++)
- {
- ComHelper.DetectedComPortEventHandler detectedComPortEventHandler = (ComHelper.DetectedComPortEventHandler)invocationList[j];
- if (detectedComPortEventHandler.Target is Control && ((Control)detectedComPortEventHandler.Target).InvokeRequired)
- {
- ((Control)detectedComPortEventHandler.Target).Invoke(detectedComPortEventHandler, new object[]
- {
- this,
- comPortDetectedEventArgs
- });
- }
- else
- {
- detectedComPortEventHandler(this, comPortDetectedEventArgs);
- }
- }
- }
- }
- }
- }
Meine bisherigen Versuche sehen so aus: (Problemstellen sind kommentiert)
VB.NET-Quellcode
- Imports System
- Imports System.Collections.Generic
- Imports System.Diagnostics
- Imports System.IO.Ports
- Imports System.Threading
- Imports System.Windows.Forms
- Public Class ComHelper
- Public Delegate Sub DetectedComPortEventHandler(sender As Object, e As ComPortDetectedEventArgs)
- Public Delegate Sub ProgressEventHandler(sender As Object, e As ComHelperProgressChangedEventArgs)
- Public Event DetectedComPort As ComHelper.DetectedComPortEventHandler
- Public Event ProgressChanged As ComHelper.ProgressEventHandler
- Public Property Range() As Integer
- Public Sub New()
- Me.Range = 100
- End Sub
- Public Sub New(range As Integer)
- Me.Range = range
- End Sub
- Public Sub Run()
- Dim thread As New Thread(AddressOf Me.InternalRun)
- thread.Start()
- End Sub
- Private Sub InternalRun()
- Dim list As List(Of ComPort) = New List(Of ComPort)()
- For i As Integer = 0 To Me.Range
- Try
- Dim serialPort As SerialPort = New SerialPort("COM" + i.ToString())
- serialPort.Open()
- serialPort.Close()
- list.Add(New ComPort(i))
- Catch ex_45 As Exception
- Debug.WriteLine("No rabbit on COM" + i.ToString())
- End Try
- '#######################################
- ' Ab hier geht es los
- If Me.ProgressChanged IsNot Nothing Then
- Dim percentage As Integer = 100 * i / Me.Range
- Dim comHelperProgressChangedEventArgs As ComHelperProgressChangedEventArgs = New ComHelperProgressChangedEventArgs(percentage)
- Dim invocationList As [Delegate]() = Me.ProgressChanged.GetInvocationList()
- For j As Integer = 0 To invocationList.Length - 1
- Dim progressEventHandler As ComHelper.ProgressEventHandler = CType(invocationList(j), ComHelper.ProgressEventHandler)
- If TypeOf progressEventHandler.Target Is Control AndAlso (CType(progressEventHandler.Target, Control)).InvokeRequired Then
- (CType(progressEventHandler.Target, Control)).Invoke(progressEventHandler, New Object()() { Me, comHelperProgressChangedEventArgs })
- Else
- progressEventHandler(Me, comHelperProgressChangedEventArgs)
- End If
- Next
- End If
- 'Bis hierhin....
- 'Abfrage unten entprechend gleich
- '########################################
- Next
- If Me.DetectedComPort IsNot Nothing Then
- Dim comPortDetectedEventArgs As ComPortDetectedEventArgs = New ComPortDetectedEventArgs(list.ToArray)
- Dim invocationList As [Delegate]() = Me.DetectedComPort.GetInvocationList()
- For j As Integer = 0 To invocationList.Length - 1
- Dim detectedComPortEventHandler As ComHelper.DetectedComPortEventHandler = CType(invocationList(j), ComHelper.DetectedComPortEventHandler)
- If TypeOf detectedComPortEventHandler.Target Is Control AndAlso (CType(detectedComPortEventHandler.Target, Control)).InvokeRequired Then
- (CType(detectedComPortEventHandler.Target, Control)).Invoke(detectedComPortEventHandler, New Object()() { Me, comPortDetectedEventArgs })
- Else
- detectedComPortEventHandler(Me, comPortDetectedEventArgs)
- End If
- Next
- End If
- End Sub
- End Class
Wäre wirklich cool wenn mir einer kurz helfen könnte und gegebenenfalls kurz erklären
Dankeschön