【问题标题】:Pin is currently opened in an incompatible sharing modePin 当前以不兼容的共享模式打开
【发布时间】:2017-10-22 14:37:23
【问题描述】:

我目前正在使用 UWP Toolkit 在应用页面之间导航。有一个页面用于初始化和打开 RaspberryPi GPIO 引脚。离开该页面然后尝试再次导航回该页面后会发生以下错误。

该进程无法访问该文件,因为它正被另一个进程使用。\r\n\r\nPin ' 当前以不兼容的共享模式打开。确保此应用程序或其他应用程序尚未使用此引脚

我可以看到每次访问页面时都会调用构造函数,因此会尝试打开已打开的引脚。解决此问题的最佳方法是什么?

【问题讨论】:

  • 不要在构造函数中打开引脚?
  • @Sybren,您能否详细说明一下,如果不在构造函数中,那么您在哪里建议?
  • 将打开引脚的代码放在单独的方法中,并在需要时调用它
  • @Sybren 是对的。

标签: c# uwp raspberry-pi windows-10-iot-core


【解决方案1】:

您可以将 NavigationCacheMode = NavigationCacheMode.Required; 添加到页面的 ctor 中,这样当您导航到该页面时,您的应用就不会创建它的新实例。

【讨论】:

    【解决方案2】:

    我总是让一个类处理管理 pin,以便您的用户代码可以请求 pin 进行操作。

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2011-12-31
      • 2023-03-06
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多