2

在多年没有编写脚本之后,我决定学习一门编程语言,并且选择了 C#。我相处得很好,但现在我似乎第一次遇到了一个我无法用谷歌解决的问题。

我正在制作一个模拟飞机系统作为学习练习,我想在从下拉组合框中选择一个选项时调用一个循环。

我有一个组合框/列表,其中包含三个模拟启动器开关的选项,值为 (0)Off, (1)On, (2)Ignition Only 。在真实的飞机中,选择“ ON”时,开关锁定到位10秒,然后释放。所以我想要实现的是:

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
   if (starterRight.SelectedIndex == 0)
   {
      //Starter is off
      eng2Start.Value = 0;
   }

   if (starterRight.SelectedIndex == 1)
   {
      //starter is on 
      //Start Timer
      eng2Start.Value = 1;

      if (eng2Tourqe >= 6000)
      {
         //open fuel valve
         // set Hot Start counter to 0
      }
      else 
      {
         //ensure fuel valve stays closed
         // set Hot Start counter to x+1
      }

      // End of Timer

      // set selected index back to 0
      (starterRight.SelectedIndex == 0)

   }
}

我用谷歌搜索和搜索,我读得越多,我就越迷失在这件事上。我找到了包含大量代码的答案,我还不能完全破译这些代码。

有可能做我想做的事吗?

在此先感谢您的时间。

4

6 回答 6

1

您可以添加Timer到您的Form并将Interval属性设置为10000(10 秒)。

来自代码:

if (starterRight.SelectedIndex == 1)
{
 //starter is on 
 //Start Timer
 timer1.Enabled=true;    
 }

 //in timer tick Event write the following:
 private void timer1_Tick(object sender, EventArgs e)
 {
   timer1.Enabled=false;
   //Statements to start aircraft 
 }
于 2013-11-14T10:33:46.373 回答
0

看到这个msdn 计时器

你可以使用 Threed.Sleep(10000);

于 2013-11-14T10:32:36.740 回答
0

我认为这应该有效。我没有编译它,但是用这个你锁定开关,做你的东西检查一个计时器,当到达 10 秒时,重新启用你的开关。

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
   if (starterRight.SelectedIndex == 0)
   {
      //Starter is off
      eng2Start.Value = 0;
   }

   if (starterRight.SelectedIndex == 1)
   {
      //starter is on 

      starterRight.enable = false;

      StopWatch sw = new StopWatch();      

      sw.Start();
      eng2Start.Value = 1;


      if (eng2Tourqe >= 6000)
      {
         //open fuel valve
         // set Hot Start counter to 0
      }
      else 
      {
         //ensure fuel valve stays closed
         // set Hot Start counter to x+1
      }

      if (sw.ElapsedMilliseconds <= 10000)
      {
         do
         {
             //Dummy Loop
         }
         while (sw.ElapsedMilliseconds > 10000)
         sw.Stop(); 
      }
      else
      {
          // set selected index back to 0
          sw.Stop();
          starterRight.Enabled = true;
          (starterRight.SelectedIndex == 0)
      }

   }
}
于 2013-11-14T10:35:06.887 回答
0

您可以使用TimerTick事件。禁用你的开关,当定时器打勾时,启用它。

Timer timerSwitchOn;

public SomeConstructor()
{
    timerSwitchOn = new Timer(){Interval = 10*1000}; // 10 seconds
    timerSwitchOn.Tick += new EventHandler(timerSwitchOn_Tick);
}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{    
   if (starterRight.SelectedIndex == 1)
   {
      //starter is on 
      starterRight.Enabled = false;
      timerSwitchOn.Start();
   }
}

void timerSwitchOn_Tick(object sender, EventArgs e)
{
    timerSwitchOn.Stop();
    starterRight.Enabled = true;

    // set selected index back to 0
    starterRight.SelectedIndex = 0;
}
于 2013-11-14T10:35:13.200 回答
0

您可以通过将其设置为 true(或选中,或任何您想要的)休眠 10 秒来实现这一点,如下所示:

Thread.Sleep(10000) ;

然后将其设置回 false (或取消选择,或任何你想要的)


另一种方法是启动一个将休眠十秒钟的后台线程,然后调用一个将“取消设置”按钮的方法,这样,不会阻塞 GUI ...

或者根据您使用的内容,我可能会提出其他选择,但我会认为您正在尝试学习基础 atm ... :)

于 2013-11-14T10:28:34.617 回答
0

在我最初的问题中,我说我想调用一个循环,我的意思是一个计时器,但似乎你们都明白了。

感谢您的快速回答,这个周末我将陷入困境,看看我是否能解决我的问题。

于 2013-11-14T15:14:51.163 回答