У меня есть приложение WPF с формой, которая имеет текстовое поле с именем "txtStatusWindow". У меня также есть класс vb.net, переданный мне коллегой, который должен вызываться и выполняться кодом в коде моего приложения. Мой коллега настаивает на том, что мне нужно будет использовать общие события .net для обновления текстового поля в моей форме.
Отдельный класс vb.net:
Public Class globalclass
Public Event txtStatusWindow(ByVal Text As String)
Public Sub InitializeProgram()
RaiseEvent txtStatusWindow("Updating something.")
System.Threading.Thread.Sleep(2000)
RaiseEvent txtStatusWindow("Updating something else.")
System.Threading.Thread.Sleep(2000)
RaiseEvent txtStatusWindow("Updating something other than else.")
System.Threading.Thread.Sleep(2000)
RaiseEvent txtStatusWindow("Updating something other than the else stuff.")
System.Threading.Thread.Sleep(2000)
End Sub
End Class
Мне нужно иметь возможность вызывать sub "InitializeProgram ()" из моего кода, и он должен иметь возможность обновлять "txtStatusWindow.text" во время работы.
Я сказал ему, что обновление текстового поля можно выполнить с помощью привязки данных, но я не знаю, как интегрировать отдельный класс, подобный этому, в мой проект, как вызывать в нем методы или как вызывать это обновить мои текстовые блоки через привязку данных.
Я также предположил, что методы этого класса в любом случае не оптимальны для подключения к проекту WPF, но он просто написал это в качестве примера, чтобы узнать, как соединить два проекта.
В конце концов мне нужно будет интегрировать такие классы, которые будут запускать отдельные потоки, чтобы обновлять свои данные из динамического источника и вызывать обновление многих элементов управления в моем приложении.
Пока что единственный способ, которым мы смогли заставить это работать из моего кода, - это:
Partial Public Class SplashScreen
Dim NewText as String
Public WithEvents Globals As globalclass = New globalclass
Public Delegate Sub StringDelegate(ByVal Text As String)
Public SplashText As String
Public Sub New()
MyBase.New()
Me.InitializeComponent()
Me.Show()
Globals.InitializeProgram()
End Sub
Public Sub UpdateSplashscreenHandler(ByVal Text As String) Handles Globals.UpdateSplashScreen
StatusWindowText.Text = Text
End Sub
Несмотря на то, что экран WPF «зависает» до завершения метода «globalclass InitializeProgram» (txtStatusWindow.Text не обновляется, пока sub не использует эзотерическое расширение «refresh» ...), я полностью уверен, что мы собираемся это неправильный путь.
Есть несколько примеров, касающихся интеграции, а затем привязки к объектам в существующем коде. Спасибо за проверку нашего маленького затруднения.