Ссылка на текстовое поле пользовательского интерфейса из потока с помощью synchronizationcontext
Я работаю с системой GPS, которая предоставляет обновления с помощью метода обратного вызова. Метод обратного вызова находится в другом потоке, чем поток пользовательского интерфейса. Я хочу записать возвращаемые значения в текстовые поля в winform. В приведенном ниже коде я вызываю метод UpdateUI из метода обратного вызова с помощью uiContext.Отправить с uicontext, установленным в потоке пользовательского интерфейса. Однако в методе UpdateUI я не могу получить доступ к элементам пользовательского интерфейса. В WinForm есть только два текстовых поля, но в методе UpdateUI элементы текстового поля LonOutput.text и LatOutput.text не распознаются. Оба эти элементы находятся в общественном. Вот код
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Tinkerforge; using System.Timers; using System.Threading; namespace Test_of_GPS_Call_Back { public partial class Form1 : Form { private static string HOST = "localhost"; private static int PORT = 4223; private static string UID = "CGH"; public static long gpsLatitude, gpsLongitude; public static SynchronizationContext uiContext; static int i = 0; public Form1() { InitializeComponent(); uiContext = SynchronizationContext.Current; IPConnection ipcon = new IPConnection(); BrickletGPSV2 gps = new BrickletGPSV2(UID, ipcon); ipcon.Connect(HOST, PORT); gps.CoordinatesCallback += CoordinatesCB; gps.SetCoordinatesCallbackPeriod(200); } static void CoordinatesCB(BrickletGPSV2 sender, long latitude, char ns, long longitude, char ew) { gpsLatitude = latitude; gpsLongitude = longitude; uiContext.Send(UpdateUI, latitude); } private static void UpdateUI(object state) { i++; } } }
когда я ввожу LatOutput. text в методе UpdateUI, он не распознается. Я поместил увеличенное целое число i в UpdateUI только для того, чтобы проверить, что к нему правильно обращаются, и убедиться, что состояние содержит выходные данные gps. В примерах, которые я нашел в интернете, они просто могли напрямую получить доступ к элементам пользовательского интерфейса из этого метода.
Я новичок в этом деле, так что, наверное, мне не хватает чего-то простого.
Что я уже пробовал:
Я попробовал несколько способов доступа к элементам пользовательского интерфейса, но ни один из них не сработал.