andycruce Ответов: 1

Сделать объект глобальным


Я пытаюсь периодически читать с устройства, подключенного через USB-кабель, и обновлять свойства WinForm обновленной информацией. Это устройство представляет собой GPS, созданный компанией TinkerForge, с которым связан API. Доступ к устройству осуществляется в два этапа:

Сначала подключитесь к устройству, код будет:
IPConnection ipcon = new IPConnection();
Bricklet gps - new BrickletGPS(UID, icon);  Where UID is a sting with the 
         device ID
ipcon.Connect (HOST, PORT);  Where HOST is "localhost" and PORT is 4223;

После подключения в gps существует ряд методов получения данных, таких как:
gps.GetDateTime (out long date, out long time);

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

структура кода такова:
public partial class Form1:form
{
     
   public Form1()
     {
        InitializeComponent();
        Timer code in here to call DoWork periodically to collect GPS Data
        Will use RunWorkerCompleted to update the GUI with the new Data
      }

      private void DoWork (Object sender, DoWorkEventArgs e)
      {
          I can put the connection and access code in here and it works 
          but then the 
          connection is reestablished on each cycle.  I'd like access to 
          the gps object here rather then continually reinitializing it.
       }

{


Что я уже пробовал:

Когда я ставлю код инициализации перед public Form1 (), то
IPConnection ipcon = new IPConection(); works

Однако следующий оператор Bricket gps = new BrickletGPS (UID, ipcon) помечается ошибкой, заключающейся в том, что инициализатор поля не может ссылаться на нестатический метод поля или свойство Form1 (). ipcon. В результате инициализация завершается неудачей.

Когда я помещаю инициализацию в метод Form1 (), то такие операторы, как

gps. GetDateTime указывает на то, что gps не существует в текущем контексте. То же самое происходит, когда я ставлю первый раз оператор if для выполнения соединения. Объект gps не распознается вне поля оператора if.

Я новичок в C# и .net и не уверен, возможно ли это и если да, то кто сделает объект gps глобальным

Спасибо за любую помощь

1 Ответов

Рейтинг:
1

Wendelius

Если вам нужно получить доступ к одному объекту из нескольких форм, один из способов-создать статический класс для хранения и инициализации объекта. Что-то вроде

public static class Gps {
   public IPConnection Connection { get; private set; }
   
   public Initialize() {
      Gps.Connection = new new IPConection();
   }
}

Теперь вы можете ссылаться на статический класс везде в вашей программе, например

Gps.Initialize();
...
Gps.IPConnection...