我正在製作一個應用程序,該應用程序從通過串行電纜連接到我的計算機的儀表讀取值。當我按下一個按鈕時,我向儀表發送一個命令,幾毫秒後,我收到儀表迴應的答覆。 我將這些值保存到具有屬性init的類中,以便我可以從任何地方訪問這些值。使用另一個類的屬性訪問類返回空值
所以我的問題是,當我試圖讓該值回它返回一個「沒有價值」,它可能是從初始化我有一個具有「新」這樣的昏暗clsSavedValues作爲新clsSavedValues',所以當我嘗試從該屬性類中獲取值時,我創建了一個新實例,如果我沒有弄錯,那個實例是空的。
我發佈了下面的代碼,但這裏是代碼流程: 我有3個類。 MainClass,ProtocolClass,PropertiesClass。 從主要我調用ProtocolClass內的方法,該方法發送一個命令到儀表。幾個毫秒後,我得到一個回調裏面ProtocolClass和這個方法被稱爲'Private Sub SerialPort_DataReceived(ByVal sender As Object,ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)Handlers SerialPort.DataReceived',並保存返回值到PropertiesClass。 在DataReceived方法完成後,我回到MainClass並調用另一個方法從我剛剛保存的PropertiesClass中獲取值,但它們返回null。我知道他們被正確保存,因爲如果我從ProtocolClass中調用它們,我可以訪問它們。但是它們從MainClass中爲null。
這裏是我的代碼: MainClass
'Here i call the ProtocolClass
Private Sub btnGetLastTransaction_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetLastTransaction.Click
clsProtocol.GetLastTransaction(1, Integer.Parse(tbxTransactionPosition.Text))
End Sub
'Here i try to read the valies from PropertiesClass
Public Sub RetrieveMeterSerialNumber()
Dim clsSavedValues As New clsSavedValues
lblMeterSerialNumber.Text = clsSavedValues.SaveMeterSerialNumber
End Sub
ProtocolClass
Public Sub GetLastTransaction(ByVal destinationAddress As String, ByVal transactionNum As Integer)
clsSavedValues = New clsSavedValues 'Creating Instance of the properties class
Try
Dim v_bodyOfMessage As [Byte]() = {ASCIItoHEX("G"), _
ASCIItoHEX("r")}
Dim v_bytearray As [Byte]() = ConstructCommand(v_bodyOfMessage)
SendCommand(v_bytearray)
Catch ex As Exception
Console.WriteLine("Meter serial number button click exception: {0}", ex)
End Try
End Sub
Private Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
If comOpen Then
Try
ReDim rx(rxPacketSize)
Console.WriteLine("RESPONSE")
For i = 0 To rxPacketSize - 1
readByte = SerialPort.ReadByte.ToString
Console.WriteLine(i.ToString & ": " & Conversion.Int(readByte).ToString)
rx(i) = Conversion.Int(readByte).ToString
If i <> 0 Then
If Convert.ToByte(rx(i)) = vDelimeterFlag(0) Then Exit For
End If
Next
DecodeResponse()
Catch ex As Exception
MsgBox("SerialPort_DataReceived Exception: " & ex.Message)
End Try
End If
End Sub
Private Sub GetMeterSerialNumber()
Dim i_startPosition As Integer = 5
Dim meterSerialNumber As String = GetRemainingPortionOfString(i_startPosition)
clsSavedValues.SaveMeterSerialNumber = meterSerialNumber
frmExplorer.RetrieveMeterSerialNumber() 'This is the call to the main class
End Sub
PropertiesClass
Public Property SaveMeterSerialNumber() As String
Get
Return _MeterSerialNumber
End Get
Set(ByVal meterSerialNumber As String)
_MeterSerialNumber = meterSerialNumber
End Set
End Property
我想從PropertiesClass中獲取值,因爲生病得到的流量超過流量響應並導致線程問題,我無法跟蹤它們。所以我將這些值保存在一個類中,然後我想從這個類中訪問它們。 對不起,對我的任何想要澄清
你需要使用靜態屬性。在這種情況下不需要製作「新建」,只需將類屬性 – bdn02