我目前正在使用UWP Toolkit在应用页面之间导航。有一个页面用于初始化和打开RaspberryPi GPIO引脚。导航离开该页面然后尝试再次导航回到它后发生以下错误。
该进程无法访问该文件,因为该文件正由另一个进程使用。\ r \ n \ r \ nPin'目前以不兼容的共享模式打开。确保此应用程序或其他应用程序尚未使用此引脚
我可以看到每次访问页面时都会调用构造函数,因此尝试打开已打开的引脚。解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
您可以将NavigationCacheMode = NavigationCacheMode.Required;
添加到页面的代码中,这样当您在那里导航时,您的应用就不会创建新的实例。
答案 1 :(得分:0)
我一直做的是让一个类处理管脚,以便您的用户代码可以请求管脚进行操作。
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);
}