![](/img/trans.png)
[英]NFC-reader on Win IOT: Pin ' is currently opened in an incompatible sharing mode
[英]Pin is currently opened in an incompatible sharing mode
我目前正在使用UWP Toolkit在應用程序頁面之間導航。 有一個頁面用於初始化和打開RaspberryPi GPIO引腳。 離開該頁面然后嘗試再次導航回該頁面后,將發生以下錯誤。
該進程無法訪問該文件,因為該文件正在被另一個進程使用。\\ r \\ n \\ r \\ nPin'當前以不兼容的共享模式打開。 確保此應用程序或其他應用程序尚未使用此引腳
我可以看到每次訪問頁面時都會調用構造函數,因此嘗試打開已經打開的引腳。 解決此問題的最佳方法是什么?
您可以添加NavigationCacheMode = NavigationCacheMode.Required;
到頁面ctor的位置,因此當您瀏覽該頁面時,您的應用不會為其創建新實例。
我一直做的是讓一個類處理管腳,以便您的用戶代碼可以請求管腳進行操作。
public class IO
{
private readonly GpioController _gpioController;
private readonly Dictionary<int, GpioPin> _pins;
public IO(GpioController gpioController)
{
_gpioController = gpioController;
_pins = new Dictionary<int, GpioPin>();
}
public GpioPin OpenPin(int pin, GpioSharingMode mode)
{
if (_pins.ContainsKey(pin))
{
var gpioPin = _pins[pin];
if (gpioPin.SharingMode == mode)
{
return gpioPin;
}
throw new ArgumentException($"Pin '{pin}' is already configured in mode '{gpioPin.SharingMode}'");
}
else
{
var gpioPin = _gpioController?.OpenPin(pin, mode);
_pins[pin] = gpioPin;
return gpioPin;
}
}
}
然后我的視圖模型只要求如下圖釘
public MainViewModel()
{
_io = ServiceContainer.Instance.Get<IO>();
_brakingPin = _io.OpenPin(4, GpioSharingMode.Exclusive);
_io.SetDriveMode(_brakingPin, GpioPinDriveMode.Output);
_io.Write(_brakingPin, GpioPinValue.Low);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.