VB és a net
Ismeretlen szerzőről
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
Aki, ezt összehozta, maradandót alkotott!
Aki, ezt összehozta, maradandót alkotott!
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Tegnap hűtésgondokkal küzdöttem (elkezdett zörögni az egyik venti) azért nem ment.
Ma már ismét üzemel.
Ja és a menüproblémák is ki lettek javítva.
Ma már ismét üzemel.
Ja és a menüproblémák is ki lettek javítva.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
VB net 2008
Szervusztok!
Elkezdtem foglalkozni a VB net 2008 -al.
Gondoltam kipróbálom a soros portot, de nem sikerült.
A szálkezelés kifogott rajtam.
Kód:
Public Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
TextBox1.Text = TextBox1.Text & SerialPort1.ReadChar
End Sub
Ezt a hibaüzenetet kapom: A szálak közötti művelet érvénytelen: Megpróbáltak hozzáférni a(z) „TextBox1” vezérlőhöz egy olyan szálból, amely nem egyezik a vezérlőt létrehozó szállal.
Ez nekem új.
Van valakinek tapasztalata ez ügyben?
Elkezdtem foglalkozni a VB net 2008 -al.
Gondoltam kipróbálom a soros portot, de nem sikerült.
A szálkezelés kifogott rajtam.
Kód:
Public Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
TextBox1.Text = TextBox1.Text & SerialPort1.ReadChar
End Sub
Ezt a hibaüzenetet kapom: A szálak közötti művelet érvénytelen: Megpróbáltak hozzáférni a(z) „TextBox1” vezérlőhöz egy olyan szálból, amely nem egyezik a vezérlőt létrehozó szállal.
Ez nekem új.
Van valakinek tapasztalata ez ügyben?
Hát ezt nem igy szokás.
Meg kell nyitni a portot beállítani a biteket pl 8.n.1 stb
bár a linkben ilyen nincs
ezt nézd meg:
http://support.microsoft.com/kb/823179
vagy esetleg kész osztályt letölthetsz és azt beemeled
és használod kevesebbet kell írni pl ezt:
http://www.codeworks.it/net/VBNetRs232.htm
amúgy meg szerintem érdemes letölteni a 2010-et
ott már azért sokkal jobban el van ez rendezve másrészt
meg érdemes átszokni a c#-ra.
vb-ben sokminent nem lehet megcsinálni és c# ben meg
sokkal több help áll rendelkezésre.
Gondlok itt a 3.5 framework könyvre amit ha keresgélsz
google-ban biztos megtalálod valamilyen pdf formában.
2 kötet kb 1600 oldal magyarul.a-z ig.
Én is Vb-be próbálkoztam egy darabig de rájöttem hogy a c#
sokkal jobb.
Különben meg valahogy igy kéne szerintem ezt:
Textbox1.Text = string(SerialPort1.ReadChar)
legalábbis castot kéne csinálni.
azt hogy vb ben hogyiskell már nem nagyon emlékszem
de az is lehet hogy elöször igy:
Dim Rsbuffer As string
Rsbuffer = string(SerialPort1.ReadChar)
Textbox1.Test = Rsbuffer
pl
a komplett meg valahogy igy néz ki
Meg kell nyitni a portot beállítani a biteket pl 8.n.1 stb
bár a linkben ilyen nincs
ezt nézd meg:
http://support.microsoft.com/kb/823179
vagy esetleg kész osztályt letölthetsz és azt beemeled
és használod kevesebbet kell írni pl ezt:
http://www.codeworks.it/net/VBNetRs232.htm
amúgy meg szerintem érdemes letölteni a 2010-et
ott már azért sokkal jobban el van ez rendezve másrészt
meg érdemes átszokni a c#-ra.
vb-ben sokminent nem lehet megcsinálni és c# ben meg
sokkal több help áll rendelkezésre.
Gondlok itt a 3.5 framework könyvre amit ha keresgélsz
google-ban biztos megtalálod valamilyen pdf formában.
2 kötet kb 1600 oldal magyarul.a-z ig.
Én is Vb-be próbálkoztam egy darabig de rájöttem hogy a c#
sokkal jobb.
Különben meg valahogy igy kéne szerintem ezt:
Textbox1.Text = string(SerialPort1.ReadChar)
legalábbis castot kéne csinálni.
azt hogy vb ben hogyiskell már nem nagyon emlékszem
de az is lehet hogy elöször igy:
Dim Rsbuffer As string
Rsbuffer = string(SerialPort1.ReadChar)
Textbox1.Test = Rsbuffer
pl
Kód: Egész kijelölése
Imports System
Imports System.IO.Ports
Imports System.Threading
Public Class PortChat
Shared _continue As Boolean
Shared _serialPort As SerialPort
Public Shared Sub Main()
Dim name As String
Dim message As String
Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase
Dim readThread As Thread = New Thread(AddressOf Read)
' Create a new SerialPort object with default settings.
_serialPort = New SerialPort()
' Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName)
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate)
_serialPort.Parity = SetPortParity(_serialPort.Parity)
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits)
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits)
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake)
' Set the read/write timeouts
_serialPort.ReadTimeout = 500
_serialPort.WriteTimeout = 500
_serialPort.Open()
_continue = True
readThread.Start()
Console.Write("Name: ")
name = Console.ReadLine()
Console.WriteLine("Type QUIT to exit")
While (_continue)
message = Console.ReadLine()
If sComparer.Equals("quit", message) Then
_continue = False
Else
_serialPort.WriteLine( _
String.Format("<{0}>: {1}", name, message))
End If
end while
readThread.Join()
_serialPort.Close()
End Sub
Public Shared Sub Read()
While (_continue)
Try
Dim message As String = _serialPort.ReadLine()
Console.WriteLine(message)
Catch ex As TimeoutException
' Do nothing
End Try
End While
End Sub
Public Shared Function SetPortName(ByVal defaultPortName As String) As String
Dim newPortName As String
Console.WriteLine("Available Ports:")
Dim s As String
For Each s In SerialPort.GetPortNames()
Console.WriteLine(" {0}", s)
Next s
Console.Write("COM port({0}): ", defaultPortName)
newPortName = Console.ReadLine()
If newPortName = "" Then
newPortName = defaultPortName
End If
Return newPortName
End Function
Public Shared Function SetPortBaudRate(ByVal defaultPortBaudRate As Integer) As Integer
Dim newBaudRate As String
Console.Write("Baud Rate({0}): ", defaultPortBaudRate)
newBaudRate = Console.ReadLine()
If newBaudRate = "" Then
newBaudRate = defaultPortBaudRate.ToString()
End If
Return Integer.Parse(newBaudRate)
End Function
Public Shared Function SetPortParity(ByVal defaultPortParity As Parity) As Parity
Dim newParity As String
Console.WriteLine("Available Parity options:")
Dim s As String
For Each s In [Enum].GetNames(GetType(Parity))
Console.WriteLine(" {0}", s)
Next s
Console.Write("Parity({0}):", defaultPortParity.ToString())
newparity = Console.ReadLine()
If newparity = "" Then
newparity = defaultPortParity.ToString()
End If
Return CType([Enum].Parse(GetType(Parity), newParity), Parity)
End Function
Public Shared Function SetPortDataBits(ByVal defaultPortDataBits As Integer) As Integer
Dim newDataBits As String
Console.Write("Data Bits({0}): ", defaultPortDataBits)
newDataBits = Console.ReadLine()
If newDataBits = "" Then
newDataBits = defaultPortDataBits.ToString()
End If
Return Integer.Parse(newDataBits)
End Function
Public Shared Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits
Dim newStopBits As String
Console.WriteLine("Available Stop Bits options:")
Dim s As String
For Each s In [Enum].GetNames(GetType(StopBits))
Console.WriteLine(" {0}", s)
Next s
Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString())
newStopBits = Console.ReadLine()
If newStopBits = "" Then
newStopBits = defaultPortStopBits.ToString()
End If
Return CType([Enum].Parse(GetType(StopBits), newStopBits), StopBits)
End Function
Public Shared Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake
Dim newHandshake As String
Console.WriteLine("Available Handshake options:")
Dim s As String
For Each s In [Enum].GetNames(GetType(Handshake))
Console.WriteLine(" {0}", s)
Next s
Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString())
newHandshake = Console.ReadLine()
If newHandshake = "" Then
newHandshake = defaultPortHandshake.ToString()
End If
Return CType([Enum].Parse(GetType(Handshake), newHandshake), Handshake)
End Function
End Class
VB Net 2010 megoldotta a problémát.
Köszönöm!
Kód: Egész kijelölése
'Serial Port Interfacing with VB.net 2010 Express Edition
'Copyright (C) 2010 Richard Myrick T. Arellaga
'
'This program is free software: you can redistribute it and/or modify
'it under the terms of the GNU General Public License as published by
'the Free Software Foundation, either version 3 of the License, or
'(at your option) any later version.
'
'This program is distributed in the hope that it will be useful,
'but WITHOUT ANY WARRANTY; without even the implied warranty of
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
'GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Public Class frmMain
Dim myPort As Array 'COM Ports detected on the system will be stored here
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box.
myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
cmbBaud.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used
cmbBaud.Items.Add(19200)
cmbBaud.Items.Add(38400)
cmbBaud.Items.Add(57600)
cmbBaud.Items.Add(115200)
For i = 0 To UBound(myPort)
cmbPort.Items.Add(myPort(i))
Next
cmbPort.Text = cmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected
cmbBaud.Text = cmbBaud.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list
btnDisconnect.Enabled = False 'Initially Disconnect Button is Disabled
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
SerialPort1.PortName = cmbPort.Text 'Set SerialPort1 to the selected COM port at startup
SerialPort1.BaudRate = cmbBaud.Text 'Set Baud rate to the selected value on
'Other Serial Port Property
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.DataBits = 8 'Open our serial port
SerialPort1.Open()
btnConnect.Enabled = False 'Disable Connect button
btnDisconnect.Enabled = True 'and Enable Disconnect button
End Sub
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
SerialPort1.Close() 'Close our Serial Port
btnConnect.Enabled = True
btnDisconnect.Enabled = False
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
SerialPort1.Write(txtTransmit.Text & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii
'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort
End Sub
Private Sub ReceivedText(ByVal [text] As String)
'compares the ID of the creating Thread to the ID of the calling Thread
If Me.rtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.rtbReceived.Text &= [text]
End If
End Sub
Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = cmbPort.Text 'pop a message box to user if he is changing ports
Else 'without disconnecting first.
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub
Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.BaudRate = cmbBaud.Text 'pop a message box to user if he is changing baud rate
Else 'without disconnecting first.
MsgBox("Valid only if port is Closed", vbCritical)
End If
End Sub
End Class
Sziasztok,
Csak néhány megjegyzést fűznék hozzá a fentiekhez.
Az utoljára bemásolt kód vb2008-ban is ugyanúgy működik, sőt, 2005-ben is, mivel semmi olyat nem használ, amit nem tartalmaz a 2.0-s framework.
C# semmivel sem tud többet, mint a VB. Amit C#-ban meg lehet csinálni, azt VB.net-ben ugyanúgy. Egyik kutya, másik eb. Csak a szintaktika ami más. A háttér ugyanaz. Kinek melyik tetszik.
C#-nak talán annyi előnye van, hogy ha tudsz C#-ul, akkor -kis túlzással- már Java-ul is tudsz.
Csak néhány megjegyzést fűznék hozzá a fentiekhez.
Az utoljára bemásolt kód vb2008-ban is ugyanúgy működik, sőt, 2005-ben is, mivel semmi olyat nem használ, amit nem tartalmaz a 2.0-s framework.
C# semmivel sem tud többet, mint a VB. Amit C#-ban meg lehet csinálni, azt VB.net-ben ugyanúgy. Egyik kutya, másik eb. Csak a szintaktika ami más. A háttér ugyanaz. Kinek melyik tetszik.
C#-nak talán annyi előnye van, hogy ha tudsz C#-ul, akkor -kis túlzással- már Java-ul is tudsz.