Forum: PC-Programmierung .wav- Dateien mit Visual Basic abspielen


von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Hallo,
wie kann ich mit Visual Basic eine .wav- Datei abspielen?

Ich spiele bis jetzt immer mit: My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
ab, wobei "Path" eben den Dateipfad enthält. Klappt auch, nur nachdem 
die Datei abgespielt wurde, hängt sich das Programm auf (es kommt im 
Debugger keine Fehlermeldung, der Programmablauf wird einfach gestoppt).

Gibt es irgendeine andere Möglichkeit eine .wav- Datei (einfach!) 
abzuspielen, oder weiß jemand das Problem bei meiner Abspielvariante?
Erstellt wird das ganze mit Visual Basic 2008 Express Edition.

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von Timmo H. (masterfx)


Lesenswert?

Entweder per WinAPI => sndPlaySound() oder einfach das erste 
Google-Ergebnis anklicken 
http://www.google.de/search?q=.net+wav+abspielen

von juppi (Gast)


Lesenswert?

My.Computer.Audio.Play("sound\sprache.wav")

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, danke für eure Hilfe, ich hab jetzt den eigentlichen Fehler 
entdeckt. Die -wav- Datei wird mit My.Computer.Audio.Play(Path,
AudioPlayMode.Background) abgespielt, aber danach lösche ich den Inhalt 
einer Textbox mit TextBox1.Clear(), und da hängt er sich auf.

Kann man den Inhalt der Textbox auch anders löschen, oder weiß jemand wo 
der Fehler bei meiner Methode liegt?

Gruß, Steffen

von juppi (Gast)


Lesenswert?

TextBox1.text=""

Probiere mal das

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

hmmm, das klappt auch nich. Warscheinlich liegts an der Playerfunktion. 
Muss man die irgendwie noch beenden, oder so? Weil das Programm hängt 
sich immer nach dem .wav- Player auf, egal was danach kommt.

Gruß, Steffen

von juppi (Gast)


Lesenswert?

My.Computer.Audio.Play("sound\sprache.wav")

wenn du hiermit aufrufst, hängt er sich auch auf??

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Genau, danach hängt sich das Programm auf, keine Ahnung wieso. Der 
Debugger zeigt nichts an, aber der Programmablauf wird einfach gestoppt, 
und im Taskmanager wird das Programm sogar als "nicht reagierend" 
angezeigt. Woran liegt das nur?
Benötigst du eventuell auch mal den ganzen Programmcode?

Gruß, Steffen

von juppi (Gast)


Lesenswert?

@Steffen O. (derelektroniker)


Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        My.Computer.Audio.Play("c:\sound\sprache.wav")
    End Sub
End Class


Versuche das einfache erst einmal.
Richtigen Pfad der datei ("c:\sound\sprache.wav")

Mit dem Button starten und wiederholen.

Gruß

von juppi (Gast)


Lesenswert?

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click

        ' My.Computer.Audio.Play("c:\sound\sprache.wav", 
AudioPlayMode.Background)
        ' My.Computer.Audio.Play("c:\sound\sprache.wav", 
AudioPlayMode.BackgroundLoop)
        My.Computer.Audio.Play("c:\sound\sprache.wav", 
AudioPlayMode.WaitToComplete)


    End Sub
End Class

Klappt alles ,hängt sich nicht auf

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Jo, das ist das komische, als ich das Programm noch nicht so weit hatte, 
hat alles noch ohne Probleme funktioniert, aber seit ich es dann 
weiterentwickelt habe, funktioniert es nicht mehr.....

Ich poste hier nun einfach mal meinen Code, vielleicht weiß dann jemadn, 
worans liegt:
------------------------------------------------------------------------ 
--
Public Class Form1

    Dim Path As String

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e 
As System.EventArgs) Handles TextBox1.TextChanged
        Dim wahl As String
        Dim clip1 As String = TextBox9.Text
        Dim clip2 As String = TextBox10.Text
        Dim clip3 As String = TextBox2.Text
        Dim clip4 As String = TextBox3.Text
        Dim clip5 As String = TextBox4.Text
        Dim clip6 As String = TextBox5.Text
        Dim clip7 As String = TextBox6.Text
        Dim clip8 As String = TextBox7.Text
        Dim clip9 As String = TextBox8.Text
        Dim zahl As Byte = 1


        Do
            wahl = TextBox1.Text
            Select Case wahl
                Case 1
                    Path &= clip1
                    Path &= ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 2
                    Path += clip2
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 3
                    Path += clip3
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 4
                    Path += clip4
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 5
                    Path += clip5
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 6
                    Path += clip6
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 7
                    Path += clip7
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 8
                    Path += clip8
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 9
                    Path += clip9
                    Path += ".wav"
                    My.Computer.Audio.Play(Path, 
AudioPlayMode.Background)
                    TextBox1.Clear()
                Case 0
                    End

            End Select

        Loop While zahl = 1


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Dim objfile As New FolderBrowserDialog

        objfile.ShowNewFolderButton = True
        If objfile.ShowDialog() <> DialogResult.Cancel Then
            Path = objfile.SelectedPath()
        End If
        Path += "\"
    End Sub

End Class
------------------------------------------------------------------------ 
---
Das Programm soll, sobald in TextBox1 etwas eingegeben werden, die 
.wav-Datei abspielen, die eben mit der jeweiligen Nummer versehen ist. 
In die TextBoxen 2-10 gibt man ein, wie die .wav- Datei heißt, und über 
die Ordnerwahl, stellt man ein, in welchem Ordner sich diese Dateien 
befinden.
Man stellt praktisch erst den Ordner ein, dann weißt man den Zahlen 1-9 
jeweils eine .wav- Datei zu, und dann gibt man in TextBox1 immer die 
jeweilige Zahl von der .wav-Datei ein, die man abgespielt haben möchte.
Und nach jeder Eingabe soll eben die TextBox wieder gelöscht werden.

Das Programm hängt sich jedesmal nach dem Abspielen der Datei auf, ich 
hab keine Ahnung, wieso....

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von juppi (Gast)


Lesenswert?

@Steffen O. (derelektroniker)

TextBox1.Clear()

nach dem löschen wird wieder aufgerufen, mit einen Inhalt ""?
(keine Fehlerabfangung)
Versuche  mit  TextBox1.text=0
Dir ist bekannt das dein Cod etwas eigenwillig ist?

P.S. bin auf einen VB freien Gast PC ,kann nicht testen.
Mein Enkel haut mir einen auf die Nuss

Gruß

von thomas (Gast)


Lesenswert?

du hast ja eine Endlosschleife programmiert.

sobald du was in die textbox eingibst, kommst du in das onchange event.
Aber nie wieder raus!!! deine "zahl"  ist immer 1.
da du nichtmal ein doevents in der schleife hast, wird dein rechner auf 
100% Systemlast gehen. Deine Do/Loop Schleife kannst du doch weglassen, 
oder?

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Hallo,
thomas wrote:
> du hast ja eine Endlosschleife programmiert.
Ja, das war eigentlich gewollt, aber nicht so.....

> sobald du was in die textbox eingibst, kommst du in das onchange event.
> Aber nie wieder raus!!! deine "zahl"  ist immer 1.
> da du nichtmal ein doevents in der schleife hast, wird dein rechner auf
> 100% Systemlast gehen. Deine Do/Loop Schleife kannst du doch weglassen,
> oder?
Jetzt wo ich darüber nachdenke, hast du Recht, die Endlosschleife ist 
völlig unsinnig!! Ich dachte eben, dass er immer wieder die TextBox1 
einbfragen soll, und dann eben die jeweilige Datei abspielen soll, aber 
dann hätte ich die Schleife ja vor dem TextBox onchange event machen 
müssen....

Ich hab die Schleife nun rausgenommen, und dann klappt es auch das erste 
Mal mit dem Löschen der TextBox, aber wenn ich dan das zweite Mal etwas 
in die TextBox eingebe, dann kommt eine Fehlermeldung, das die 
FileNotFoundExeption nicht behandelt wurde.
Wieso klappt das beim ersten Mal, und beim zweiten Mal nicht?

Gruß, Steffen

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

So, inzwischen hab ich das Programm vollständig hinbekommen. Nun klappt 
alles mit dem Abspielen.
Nun noch eine Frage: Wie kann ich, wenn ich in die ganzen TextBoxen die 
jeweiligen .wav- Dateien hineingeschrieben habe, die beim Druck der 
jeweiligen Taste abgespielt werden sollen, den Inhalt dieser TextBoxen 
irgendwie in Variablen speichern, sodass die Inhalte auch noch nach dem 
Beenden des Programms, oder sogar des Computers auf der Festplatte 
gespeichert sind, und ich sie beim nächsten Start wieder laden kann?

Muss ich da irgendein .txt- File anlegen, in dem die ganzen Sachen 
gespeichert sind, oder wie geht das?

Ach ja, es sollte möglichst einfach sein, oder gut kommentiert, da ich 
Anfänger bin, und mich noch nicht so gut auskenne.

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von juppi (Gast)


Lesenswert?


von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, vielen Dank!! Könnte ich das dann so lösen:
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
        Dim oFStream As New FileStream("C:\test.txt", 
FileMode.OpenOrCreate)
        Dim oSWriter As New StreamWriter(oFStream)
        oSWriter.WriteLine(TextBox1.Text)
        oSWriter.WriteLine(TextBox2.Text)
        oSWriter.WriteLine(TextBox3.Text)
        oSWriter.WriteLine(TextBox4.Text)
        oSWriter.WriteLine(TextBox5.Text)
usw, bis eben alle Textboxen angespeichert sind....
        oSWriter.Close()
    End If

Muss ich immer eine neue Zeile machen, bevor ich den nächsten TextBoxen- 
Inhalt abspeichere? Wie mach ich das?

Und: Wie füge ich System.IO. als library ein?
Noch was :-): Dann muss ich das ganze ja auch wieder laden können, gibts 
dafür einfache Varianten? (Hab nun schon einige Zeit im web gesucht, 
aber immer nur Lösungen gefunden, die sich über eine ganze Seite Code 
oder mehr erstrecken....)

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von juppi (Gast)


Lesenswert?

vieleicht hilft das auch

kann aber nicht testen

'Dieser Tipp demonstriert den Zugriff auf Textdateien in VB.Net. 
Praktisch das, was in VB 6 mit den Dateizugriffsbefehlen 
Open...For...As... durchgeführt wird: Wie man eine neue Textdatei 
anlegt, Text hineinschreibt, Text anfügt und die Textdatei in eine 
Listbox ausliest.
'Dazu ist zunächst der Namensraum System.IO über den Imports-Befehl 
einzubinden. Über die Objekte FileStream, TextReader und TextWriter und 
deren Methoden kann eine Textdatei dann über einen Stream gelesen und 
auch geschrieben werden.

  Imports System.IO

Public Class Form1
    Inherits System.Windows.Forms.Form
    'Vom Windows Form Designer generierter Code
    'Datei neu anlegen und Text hineinschreiben
    Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim FiStr As FileStream = _
              New FileStream(TextBox1.Text, FileMode.Create)
        Dim StrWr As StreamWriter = New StreamWriter(FiStr)
        StrWr.WriteLine(TextBox2.Text)
        StrWr.Close()
    End Sub

    'Text anfügen an bestehende Datei
    ' oder die Datei neu anlegen, wenn sie nicht existiert
    ' und Text hineinschreiben
    Private Sub Button2_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button2.Click
        Dim FiStr As FileStream = _
              New FileStream(TextBox1.Text, FileMode.Append)
        Dim StrWr As StreamWriter = New StreamWriter(FiStr)
        StrWr.WriteLine(TextBox2.Text)
        StrWr.Close()
    End Sub

    'Datei lesen
    Private Sub Button3_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button3.Click
        Try
            Dim FiStr As FileStream = _
                  New FileStream(TextBox1.Text, FileMode.Open)
            Dim StrRe As StreamReader = New StreamReader(FiStr)
            Dim i As Integer
            ListBox1.Items.Clear()
            Do Until StrRe.Peek() = -1
                ListBox1.Items.Add(StrRe.ReadLine)
                i += 1
            Loop
            StrRe.Close()
        Catch except As Exception
            MsgBox(except.Message & vbNewLine & _
                    "Erstellen Sie zunächst mit <Anfügen> oder " & _
                    "<Überschreiben> die Datei", _
                    MsgBoxStyle.Exclamation)
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Environment.CurrentDirectory & "\Test.dat"
        TextBox2.Text = "Hallo"
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button4.Click
        Me.Close()
    End Sub
End Class

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

juppi wrote:
>
>   Imports System.IO
Ok, dass man da IMports schreiben muss, wusste ich auch noch nicht, 
danke!


>'Text anfügen an bestehende Datei
>     ' oder die Datei neu anlegen, wenn sie nicht existiert
>     ' und Text hineinschreiben
>     Private Sub Button2_Click(ByVal sender As System.Object, _
>             ByVal e As System.EventArgs) Handles Button2.Click
>         Dim FiStr As FileStream = _
>               New FileStream(TextBox1.Text, FileMode.Append)
>         Dim StrWr As StreamWriter = New StreamWriter(FiStr)
>         StrWr.WriteLine(TextBox2.Text)
>         StrWr.Close()
>     End Sub

Ok, ich muss doch in die Variable FiStr meinen Pfadnamen schreiben, 
oder?
Wie muss ich das formulieren? So, oder wie:
Dim FiStr As FileStream = C:\test.txt

1:
>     'Datei lesen
>     Private Sub Button3_Click(ByVal sender As System.Object, _
>             ByVal e As System.EventArgs) Handles Button3.Click
>         Try
>             Dim FiStr As FileStream = _
>                   New FileStream(TextBox1.Text, FileMode.Open)
>             Dim StrRe As StreamReader = New StreamReader(FiStr)
>             Dim i As Integer
>             ListBox1.Items.Clear()
>             Do Until StrRe.Peek() = -1
>                 ListBox1.Items.Add(StrRe.ReadLine)
>                 i += 1
>             Loop
>             StrRe.Close()
>         Catch except As Exception
>             MsgBox(except.Message & vbNewLine & _
>                     "Erstellen Sie zunächst mit <Anfügen> oder " & _
>                     "<Überschreiben> die Datei", _
>                     MsgBoxStyle.Exclamation)
>         End Try
>     End Sub

2:
>     Private Sub Form1_Load(ByVal sender As System.Object, _
>             ByVal e As System.EventArgs) Handles MyBase.Load
>         TextBox1.Text = Environment.CurrentDirectory & "\Test.dat"
>         TextBox2.Text = "Hallo"
>     End Sub

3:
>     Private Sub Button4_Click(ByVal sender As System.Object, _
>             ByVal e As System.EventArgs) Handles Button4.Click
>         Me.Close()
>     End Sub

Gehört das alles zum Lesen von Dateien? Oder reicht das mit 1: 
markierte?

Weißt du, wie ich in einer solchen Textdatei die Zeile wechseln kann?
Dass ich in die erste Zeile z.B. den Inhalt der einen TextBox schreibe, 
in die zweite Zeile den Inhalt der zweite, usw.
Dann wäre auch das auslesen einiges leichter....


Vielen Dank schonmal für deine Bemühungen!!!!
Gruß, Steffen

von juppi (Gast)


Lesenswert?

@Steffen O. (derelektroniker)

Als Versuch vieleicht brauchbar
schreiben der textboxen in die datei (pro zeile)
lesen der Zeilen in die Textboxen und Listbox.

Imports System.IO

Public Class Form1
    Inherits System.Windows.Forms.Form
    'Vom Windows Form Designer generierter Code
    'Datei neu anlegen und Text hineinschreiben
    Private Sub dateiAnlegen()
        Dim FiStr As FileStream = _
              New FileStream(TextBox1.Text, FileMode.Create)
        Dim StrWr As StreamWriter = New StreamWriter(FiStr)
        StrWr.WriteLine(TextBox2.Text)
        StrWr.WriteLine(TextBox3.Text)
        StrWr.WriteLine(TextBox4.Text)
        StrWr.WriteLine(TextBox5.Text)
        StrWr.Close()
    End Sub

    'Text anfügen an bestehende Datei
    ' oder die Datei neu anlegen, wenn sie nicht existiert
    ' und Text hineinschreiben
    Private Sub textboxenNachDatei()
        Dim FiStr As FileStream = _
              New FileStream(TextBox1.Text, FileMode.Append)
        Dim StrWr As StreamWriter = New StreamWriter(FiStr)
        StrWr.WriteLine(TextBox2.Text)
        StrWr.WriteLine(TextBox3.Text)
        StrWr.WriteLine(TextBox4.Text)
        StrWr.WriteLine(TextBox5.Text)
        StrWr.Close()
    End Sub

    'Datei lesen
    Private Sub dateiLesenNachListbox()
        Try
            Dim FiStr As FileStream = _
                  New FileStream(TextBox1.Text, FileMode.Open)
            Dim StrRe As StreamReader = New StreamReader(FiStr)
            Dim i As Integer
            ListBox1.Items.Clear()
            Do Until StrRe.Peek() = -1
                ListBox1.Items.Add(StrRe.ReadLine)
                i += 1
            Loop
            StrRe.Close()
        Catch except As Exception
            MsgBox(except.Message & vbNewLine & _
                    "Erstellen Sie zunächst mit <Anfügen> oder " & _
                    "<Überschreiben> die Datei", _
                    MsgBoxStyle.Exclamation)
        End Try
    End Sub
    Private Sub dateiLesenNachtextboxen()
        Try
            Dim FiStr As FileStream = _
                  New FileStream(TextBox1.Text, FileMode.Open)
            Dim StrRe As StreamReader = New StreamReader(FiStr)

            TextBox2.Text = StrRe.ReadLine
            TextBox3.Text = StrRe.ReadLine
            TextBox4.Text = StrRe.ReadLine
            TextBox5.Text = StrRe.ReadLine
            'nicht optimal besser Zeilen in einer schleife abfragen bis 
dateiende

            StrRe.Close()
        Catch except As Exception
            MsgBox(except.Message & vbNewLine & _
                    "Erstellen Sie zunächst mit <Anfügen> oder " & _
                    "<Überschreiben> die Datei", _
                    MsgBoxStyle.Exclamation)
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = Environment.CurrentDirectory & "\Test.dat"
        TextBox2.Text = "Hallo2"
        TextBox3.Text = "Hallo3"
        TextBox4.Text = "Hallo4"
        TextBox5.Text = "Hallo5"
    End Sub

    Private Sub dateiClose()
        Me.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        textboxenNachDatei()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button2.Click
        dateiLesenNachListbox()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button3.Click
        dateiAnlegen()
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button4.Click
        dateiLesenNachtextboxen()
    End Sub
End Class



Aber jetzt mal ran

Der weg ist das ziel

Gruß

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Hallo,
@ juppi: Vielen Dank, ich hab es nun hinbekommen - ich kann nun 
speichern, und laden!!
Ich habe dein Codebeispiel als Vorlage genommen, und dann mit Hilfe zig 
verschiedener Tutorials an meine Bedürfnisse angepasst.

Wenn jemand den Code haben möchte, soll er mich anschreiben, dann poste 
ich ihn.

Gruß, Steffen

von juppi (Gast)


Lesenswert?

@Steffen O. (derelektroniker)

hallo

Na dann "gut Holz" und weitere Erfolge.

Du wirst bald erkennen das es hunderte Wege gibt.

Wie ich immer sage  "Der Weg ist das Ziel"

Gruß

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Hallo juppi,
wie kann ich mit VB einen interruptgesteuerten Datenempfang über RS232 
machen? Also praktisch, dass das Programm immer erst etwas macht, wenn 
ein Zeichen, oder String über RS232 gekommen ist.
Das Initialisieren habe ich hinbekommen.

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von juppi (Gast)


Lesenswert?

Im Designer


   Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e 
As System.IO.Ports.SerialDataReceivedEventArgs) Handles 
SerialPort1.DataReceived

'z.B.
   byteeinlesen()

    End Sub

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, danke!! Habe ich nun hinbekommen, nun muss ich es nur noch testen!

Gruß, Steffen

von juppi (Gast)


Lesenswert?

Weiter so

Wie immer "Der Weg ist das Ziel"

Gruß

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, nun klappt fast alles, ich kann mit einer Universalfernbedienung, 
nun meine .wav- Dateien abspielen!
Nur eines ist etwas komisch, und ich komme nicht dahinter, wieso:
Ich habe eine TextBox11, an einer Stelle kann ich dieser ganz einfach 
einen Wert zuweißen, mit TextBox11.Text = "Test", an anderer Stelle, 
kommt bei genau dieser Zuweißung folgender Fehler:
InvalidOperationException
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das 
Steuerelement TextBox11 erfolgte von einem anderen Thread als dem 
Thread, für den es erstellt wurde.

Woher kommt dieser Fehler? Ich weiße der Textbox nur einen String, wie 
z.B. Test, oder Hallo zu, nichteinmal eine Variable!
Die Textbox ist aber so eingerichtet, dass sie normalerweiße nicht 
sichtbar ist, und erst durch aktivieren einer Checkbox sichtbar wird, 
kann es daran liegen?

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

von juppi (Gast)


Lesenswert?

Hallo
Ich kenne ähnliche Probleme.
Kann dir aber so und jetzt nicht helfen.
Kannst du das wichtigste vom Cod mal Posten.

Andere werden dann bestimmt auch antworten können.


Gruß

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, ich poste dann mal einen Teil, der Code ist inzwischen schon recht 
gtoß, den hier komplett zu posten, würde den Rahmen sprengen.
Also, ich habe eine TextBox11, mit dieser gebe ich allerlei 
Statusmeldungen aus. Die Textbox ist normalerweiße unsichtbar, und wird 
mit dieser Funktion sichtbar gemacht:

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked Then
            TextBox11.Visible = True
            Else
            TextBox11.Visible = False

        End If

    End Sub

Wenn ich dann in einer Funktion mit TextBox11.Text = "RS232 connected" 
die Textbox beschreibe, klappt alles, beschreibe ich sie jedoch in einer 
anderen Funktion mit genau dem gleichen Text, kommt die besagte 
Fehlermeldung....
Ach ja: Die Textbox ist als NurLesen konfiguriert, da sie wie gesagt, 
nur zu Ausgeben von Statusmeldungen ist.

Ich hoffe ihr könnt mir helfen.
Gruß, Steffen

von Steffen O. (derelektroniker) Benutzerseite


Lesenswert?

Ok, ich hab mich nun durch die Microsofthilfe, und einige Tutorials 
durchgearbeitet, herausgekommen ist folgende (funktionierende!) Funktion 
zum threadübergreifenden Beschreiben der TextBox11:
 Delegate Sub SetTextCallback(ByVal [text] As String)
....
Private Sub SetText(ByVal [text] As String)

        If Me.TextBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else
            Me.TextBox11.Text = [text]
        End If
    End Sub

Also man ruft mit SetText("Hier ist der zu schreibende Text") die 
Funktion auf. Klappt nun alles wunderbar!

Gruß, Steffen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.