Как получить доступ к параметрам в PCL из UWP в Xamarin.Forms - PullRequest
0 голосов
/ 07 мая 2018

Я работаю с формами Xamarin в сочетании с устройствами I2C и Raspberry Pi. Я запрограммировал на C # и Raspberry Pi был установлен с Windows IoT. И я столкнулся с проблемой доступа к параметру.

У меня есть микротаймер в проекте UWP, и я хочу читать данные с аналогового входа каждые 100 мс. В OnTimedEvent есть расчет, который требует некоторых параметров, которые установлены в проекте PCL, пространство имен - «I2CADDA.MainPage.xaml.cs». Я попытался установить эти параметры как общедоступные статические.

public static double gainFactor = 1;
public static double gainVD = 1;

А в проекте UWP я использую службу зависимостей, потому что мне нужно использовать микросаймер, поэтому реализация интерфейса выполняется в «I2CADDA.UWP.MainPage.xaml.cs», в функции OnTimedEvent, I попытался получить параметры из файла проекта PCL.

public void OnTimedEvent(object sender, MicroLibrary.MicroTimerEventArgs timerEventArgs)
        {

            byte[] readBuf = new byte[2];
            I2CDevice.ReadI2C(chan, readBuf); //read voltage data from analog to digital converter
            sbyte high = (sbyte)readBuf[0];
            int mvolt = high * 16 + readBuf[1] / 16;
            val = mvolt / 204.7 + inputOffset;
            val = val / gainFactor / gainVD; //gainFactor and gainVD shows not exist in current context

        }

Похоже, что проект UWP не может иметь доступ к проекту PCL обычным способом. Могу ли я спросить, как я могу решить эту проблему? Большое спасибо !!!

1 Ответ

0 голосов
/ 09 мая 2018

В C # для вызова статического поля вы должны использовать имя класса для его вызова,

В вашем коде статические поля находятся в I2CADDA.MainPage.xaml.cs, и, например,они находятся в классе I2CADDA.MainPage, вы можете назвать это поле как

double Factor = I2CADDA.MainPage.gainFactor;
double VD = I2CADDA.MainPage.gainVD;

Так что ваш код выше должен быть таким:

public void OnTimedEvent(object sender, MicroLibrary.MicroTimerEventArgs timerEventArgs)
{

    byte[] readBuf = new byte[2];
    I2CDevice.ReadI2C(chan, readBuf); //read voltage data from analog to digital converter
    sbyte high = (sbyte)readBuf[0];
    int mvolt = high * 16 + readBuf[1] / 16;
    val = mvolt / 204.7 + inputOffset;
    val = val / I2CADDA.MainPage.gainFactor / I2CADDA.MainPage.gainVD; 
}

Пожалуйста, также убедитесь, что у вас есть ссылкаPCL в вашем проекте UWP.

...