如何将连接代码提取到方法? WPF

时间:2015-02-03 15:57:34

标签: c# wpf mvvm myo

我已将我的应用程序移植到MVVM模式,并已开始将代码从我的视图后面的代码移动到它自己的model类。

我采取的第一步是将设备的网络代码https://www.thalmic.com/en/myo/移动到MyoDevice类。

原始代码托管了该视图背后的代码中的所有网络代码,我告诉他们这是不好的做法。

我已尝试使用"提取方法" Visual Studio中的工具,但我不断收到错误:"The selected text is not inside a method"

有谁知道如何将此连接和断开代码提取为两个单独的方法?

最初,在将设备连接代码移动到自己的模型之前,该类看起来像这样:

http://hastebin.com/gepudayele.cs

这是放在MyoDevice模型中的代码:

http://hastebin.com/ocogoseziy.cs

连接和断开连接的示例代码,用于在连接/断开连接时侦听设备:

// create a hub that will manage Myo devices for us
        channel = Channel.Create(ChannelDriver.Create(ChannelBridge.Create()));
        hub = Hub.Create(channel);
        {

            // listen for when the Myo connects
            hub.MyoConnected += (sender, e) =>
            {

                this.Dispatcher.Invoke((Action)(() =>
                {
                    statusTbx.Text = "Myo has connected! " + e.Myo.Handle;
                    e.Myo.Vibrate(VibrationType.Short);

                    // unlock the Myo so that it doesn't keep locking between our poses
                    e.Myo.Unlock(UnlockType.Hold);

                    e.Myo.PoseChanged += Myo_PoseChanged;

                    e.Myo.OrientationDataAcquired += Myo_OrientationDataAcquired;



                }));
            };

            // listen for when the Myo disconnects
            hub.MyoDisconnected += (sender, e) =>
            {
                this.Dispatcher.Invoke((Action)(() =>
                {
                    statusTbx.Text = "Myo has disconnected!";
                    e.Myo.Vibrate(VibrationType.Medium);
                    e.Myo.OrientationDataAcquired -= Myo_OrientationDataAcquired;
                    e.Myo.PoseChanged -= Myo_PoseChanged;


                }));
            };

            // start listening for Myo data
            channel.StartListening();
        }

1 个答案:

答案 0 :(得分:2)

您正在做的事情没有什么特别之处,自动化工具应该工作。但是工具会中断,所以如果它不起作用,我会手动完成。

将代码重构为方法的步骤非常简单:

  1. 声明一个方法。如果它没有明显的返回类型,那么现在就使用void。暂无参数。
  2. 将要重构的代码剪切粘贴到此方法
  3. 任何立即初始化(但未声明)的变量都在方法内声明。
  4. 任何简单使用的变量,但显然未通过该方法设置/初始化需要成为参数
  5. 如果您发现需要返回值,请将其添加。
  6. 构建!
  7. 发现您错过的内容,根据需要声明或添加参数(遵循上述指南)
  8. 让具有已删除部分的原始代码改为使用此方法。
  9. 显然,经验会变得更容易。我会强烈推荐尽可能多地练习这样做,并且在你理解它为你做什么之前不要使用自动重构工具。工具休息。人们不会(至少不是以同样的方式)。