2012-04-23 3 views
0
Public Shared _formRef As frmMain 
Public Shared f As frmMain 

    Class Server 
     <STAThread()> Public Shared Sub Main() 
      Dim aTcpMessaging As IMessagingSystemFactory = New TcpMessagingSystemFactory() 
      Dim anInputChannel As IInputChannel = aTcpMessaging.CreateInputChannel(theIPforLocal & ":" & thePort) 
      Dim aStringMessagesFactory As IStringMessagesFactory = New StringMessagesFactory() 
      Dim aStringMessageReceiver As IStringMessageReceiver = aStringMessagesFactory.CreateStringMessageReceiver() 
      AddHandler aStringMessageReceiver.MessageReceived, AddressOf StringMessageReceived 

      aStringMessageReceiver.AttachInputChannel(anInputChannel) 
     End Sub 

     Private Shared Sub StringMessageReceived(ByVal sender As Object, ByVal e As StringMessageEventArgs) 
      _formRef = f 

      LANResponse = Convert.ToString(e.Message) 
      Dim lanSent As String() = Nothing 
      Dim sep(3) As Char 
      Dim s As String = "" 

      sep(0) = "~" 
      'sep(1) = "," 
      lanSent = LANResponse.Split(sep, 2) 

      Dim a As New Threading.Thread(AddressOf getStatus) 

      a.SetApartmentState(Threading.ApartmentState.STA) 
      a.Start(Trim(lanSent(0)) & Trim(lanSent(1))) 
    End Sub 
End Class 

Class Sending 
     Public Shared Sub Main(ByRef whatToWrite As String) 
      Dim aTcpMessaging As IMessagingSystemFactory = New TcpMessagingSystemFactory() 
      Dim anOutputChannel As IOutputChannel = aTcpMessaging.CreateOutputChannel(theIPforVM & ":" & thePort) 
      Dim aStringMessagesFactory As IStringMessagesFactory = New StringMessagesFactory() 
      Dim aStringMessageSender As IStringMessageSender = aStringMessagesFactory.CreateStringMessageSender() 

      aStringMessageSender.AttachOutputChannel(anOutputChannel) 
      aStringMessageSender.SendMessage(whatToWrite) 
     End Sub 
End Class 

    Private Shared Sub getStatus(ByVal data As Object) 
     _formRef.UpdateLabelText("Static: " & data) 
    End Sub 

    Public Sub UpdateLabelText(ByVal text As String) 
     If Me.lblStatus.InvokeRequired Then 
      Me.lblStatus.Invoke(New Action(Of String)(AddressOf UpdateLabelText), New Object() {text}) 
     Else 
      Me.lblStatus.Text = text 
     End If 
    End Sub 

#Region "Form Load" 
    <STAThread()> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     Call Server.Main() 
     '-------------------------------- 
     isTesting = False 
     lblVer.Text = "V.7" 
     '-------------------------------- 
    End Sub 
#End Region 

, но как только стреляя код я получаю сообщение об ошибке вы видите в моем изображении прилагаетсяvb.net передачи переменных в общей подлодке

error

Но как ни странно я бы передать значение я ищу для:

error 2

ответ

1

Вы никогда не назначить запущенный экземпляр frmMain к общим переменным.

При смене сервера Основной метод:

<STAThread()> Public Shared Sub Main(formRef As frmMain) 
     f = FormRef 

, а затем измените вызов этого метода:

Call Server.Main(Me) 

Тогда что должно решить вашу проблему (при условии, Server.Main называется от frmMain).

+0

Не могли бы вы показать мне, что вы объясняете выше? FrmMain уже отображается при запуске программы. – StealthRT

+0

Извините, неверно истолковал имя метода Main как точку входа для приложения. Я пересмотрел свой ответ, чтобы показать, что я думаю, что вам нужно сделать. –

+0

Только что сделал эти изменения, и я все равно получаю ту же ошибку в одной строке. – StealthRT