У меня есть эта функция, которая получает адрес вывода цифрового выхода uscita как Integer и высокий статус как boolean, а также обновляет распиновку и заполняет красный цвет эллипса в виде светодиода в пользовательском интерфейсе.
Private Function comandaUscita(ByVal uscita As Integer, ByVal high As Boolean) As Boolean
If high Then
Select Case uscita
Case 1
If gpin1 IsNot Nothing Then gpin1.Write(GpioPinValue.High)
LED1.Fill = redBrush
Case 2
If gpin1 IsNot Nothing Then gpin2.Write(GpioPinValue.High)
LED2.Fill = redBrush
...
End Select
Return True
End If
End Function
Функция вызывается каждые 500 мс через таймер. Отладка показывает, что функция работает только один раз. Во второй раз и во всех остальных случаях функция выдает исключение.
Приложение вызвало интерфейс, который был упорядочен для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
Как я могу предотвратить это без использования f ... диспетчеров и подобных громоздких вещей. Кроме того, как обновить UIelements, учитывая, что метод .Refresh не существует, опять же без использования диспетчеров f ...?
В старых winforms этих проблем не было ... ах, старые времена.
Мой пользовательский интерфейс XAML выглядит примерно так:
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="60"
Margin="10,10,10,569"
Width="340">
<TextBlock x:Name="DelayText1"
Text="Uscita digitale 1"
Margin="10"
TextAlignment="Center"
FontSize="26.667"
HorizontalAlignment="Right" />
<Ellipse x:Name="LED1"
Fill="LightGray"
Stroke="White"
Width="25"
Height="25"
Margin="10,-40,10,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
RenderTransformOrigin="3.524,-1.209"/>
</StackPanel>