Есть главная форма FormA на ней Label1. При нажатии кнопки bStart подключается OLE-сервер MI. С него постоянно считывается информация (строка), которую необходимо выводить в Label1.
Для считывания с сервера сформирован ComClass1 (CallBack).
В результате информация с сервера благополучно считывается, но вывести строку на форму не получается. Прерывания в явном виде не происходит, но из комментариев следует, что нельзя
напрямую обращаться к объекту созданному в другом потоке.
- Код: Выделить всё
================================
Public Class FormA
Inherits System.Windows.Forms.Form
Public Delegate Sub myD(ByVal s As String, ByRef ff As Form)
Public WithEvents MIClass As New ComClass1
Public MIDetail As Object
Private Sub MIClass_TrashChenge(ByVal sourse As ComClass1, _
ByVal e As ComClass1EventArgs) Handles MIClass.Trash_Change
'обработка события изменение строки в объекте MIClass
Dim ss As String
Dim mm As New myD(AddressOf AddStr)
ss = MIClass.Trash
'Me.Label1.text = ss 'не проходит
'CType(Me.Controls("Label1"), Object).Text = ss 'не проходит
mm.Invoke(ss, Me) 'не проходит
End Sub
Private Sub AddStr(ByVal s As String, ByRef ff As Form)
'ff.Label1.text = ss 'не проходит
CType(ff.Controls("Label1"), Object).Text = ss 'не проходит
Application.DoEvents()
End Sub
Private Sub bStart_Click(ByVal eventSender As System.Object, _
ByVal eventArgs As System.EventArgs) Handles bStartMI.Click
MIDetail = CreateObject("MI.Application")
MIDetail.SetCallBack(MIClass)
End Sub
.................................................
End Class
================================
Public Delegate Sub Trash_ChangeEventHandler(ByVal Sourse As ComClass1, _
ByVal e As ComClass1EventArgs)
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
Public Trash As String
#Region "COM GUIDs"
Public Const ClassId As String = "25294131-3bc4-45c4-890e-3ddcd983e1ed"
Public Const InterfaceId As String = "89878a92-32d5-435a-a8d2-bd077128c86d"
Public Const EventsId As String = "554800cf-6d6d-4f7b-b9d8-a68efa691bfd"
#End Region
Public Event Trash_Change As Trash_ChangeEventHandler
Public Sub New()
MyBase.New()
End Sub
Public Sub SetStr(ByVal cb As String)
'считывает строку с OLE-сервера
Trash = cb
showFF()
End Sub
Public Sub showFF()
'CType(ff.Controls("lblStatBar"), Object).Text = Trash
Static gg As String
If gg <> Trash Then
Dim Args As New ComClass1EventArgs
RaiseEvent Trash_Change(Me, Args)
End If
gg = Trash
End Sub
End Class
Public Class ComClass1EventArgs
Inherits EventArgs
End Class
=======================================