【问题标题】:C# asp.net /Boolean /ArduinoC# asp.net /Boolean /Arduino
【发布时间】:2014-05-11 07:59:11
【问题描述】:

您好,我在网络表单上有一个按钮,我希望在第一次单击时将“1”发送到 arduino,然后在第二次单击“0”时继续这样,我这样编码:

Boolean test == false;
 protected void Button3_Click(object sender, EventArgs e)
    {

        if (test == false)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("1");
            serijska_vrata.Close();
            test = true;
        }
         if(test == true)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("0");
            serijska_vrata.Close();
            test = false;

        } 

    }

Serijska_vrata 是串行端口的名称; 我有一种感觉,比如布尔值总是重置为假,并且永远不会得到“真”的值,我该怎么做才能修复这个,请帮助,我是编程的初学者。

提前感谢您的帮助

【问题讨论】:

  • 你在哪里初始化测试???
  • 确保在全局范围内测试变量而不是方法范围。使其成为静态变量并尝试
  • 您将 test=false 放在代码的什么位置?
  • 谢谢它的工作,我只需要添加静态。非常感谢。

标签: c# asp.net arduino boolean


【解决方案1】:

是的,它永远不会写成 true,因为在 ASP.Net 中,每次您回传到服务器时,整个代码都会被执行并呈现为 HTML,然后服务器将处理整个对象,下次服务器将创建再次测试对象并将 false 分配给它, 最好的解决方案是将布尔值的状态保存在一个隐藏值中,然后从中读取并更新它,或者您可以使用会话,但如果会话状态已过期,则需要处理。

【讨论】:

  • 你能帮我用这个方法隐藏布尔值吗,因为我想我将来会需要,现在它与静态布尔测试=假;但将来我需要每 2 秒从 arduino 获取一些数据,我已经用 backgorundworker 在 winforms 上解决了这个问题,我不知道我将如何用 aspnet 做到这一点
【解决方案2】:

这是一个网络表单应用程序,这意味着您可以在任何地方单击此按钮,那么您希望在哪里保持当前登录用户或当前会话的“测试”状态? 如果您想在当前 Session 中保持“test”状态,请尝试使用 ViewState 来保存“test”值。


private bool _test;
public bool test

{
    get{
        bool.TryParse(ViewState["test"],out _test);
        return _test;
    }
   set{
        ViewState["test"]=value;
    }
}


protected void Button3_Click(object sender, EventArgs e)
    {

        if (test == false)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("1");
            serijska_vrata.Close();
            test = true;
        }
         if(test == true)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("0");
            serijska_vrata.Close();
            test = false;

        } 

    }

【讨论】:

    【解决方案3】:

    无需检查 == true,

    if(test)
    

    一样
    if (test==true)  
    

    你需要稍微改变你的逻辑。将两个语句轮流切换。

       if (test)
        {
            serijska_vrata.Open();
            serijska_vrata.Write("0");
            serijska_vrata.Close();
            test = false;        }
        // Add the else here and remove the if otherwise it
        // will execute the if statement and test will always be false
        // It also helps if test is not initialized.
        else
        {
            serijska_vrata.Open();
            serijska_vrata.Write("1");
            serijska_vrata.Close();
            test = true;
        }
    

    【讨论】:

      猜你喜欢
      • 2013-07-10
      • 2012-11-27
      • 2017-08-09
      • 2013-09-20
      • 2011-03-12
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多