2014-04-20 2 views
0

세탁기 제어 프로그램을 만들고 내 스레드 중간에 2 초 타이머가 필요합니다. 이것은 'wash'시간을 표현하기위한 것입니다. (실제로는 30 분 정도가 소요됩니다.하지만 오래 기다리고 싶지 않습니다.) 2 초 후에 스레드로 계속됩니다.수면을 사용하지 않고 2 초의 일시 정지를 추가하는 방법은 무엇입니까?

// Door 
      if (radioButtonDoor.Checked == false) 
      { 
       doorOpenLight.FillColor = Color.Red; 
       doorOpen.FillColor = Color.Red; 
       doorUnlocked.FillColor = Color.Red; 
       doorClosed.FillColor = Color.Transparent; 
       doorLocked.FillColor = Color.Transparent; 
       doorLight.FillColor = Color.Transparent; 
      } 
      else if (radioButtonDoor.Checked == true) 
      { 
       doorOpenLight.FillColor = Color.Transparent; 
       doorOpen.FillColor = Color.Transparent; 
       doorUnlocked.FillColor = Color.Transparent; 
       doorClosed.FillColor = Color.Red; 
       doorLocked.FillColor = Color.Red; 
       doorLight.FillColor = Color.SpringGreen; 
       doorLockedImage.Visible = true; 
       //2 second timer here 
      } 
     //Wash 
      if (doorLight.FillColor == Color.SpringGreen) 
      { 
       textBoxTemp.Text = temp.ToString(); 
       washLight.FillColor = Color.SpringGreen; 
      } 

모든 색상 변경 그냥 내 강사 기계에있는 상태를 보여주고 있습니다 : 난 그냥 문을 잠금 및 세척을 시작 사이의 일시 정지 작업입니다, 이것은 내가 지금까지있는 것입니다. 언제든지 세탁을 중단 할 필요가 있으므로 잠을 자지 않으므로 유용하지 않을 수 있습니다. 감사합니다

답변

1

당신이해야 할 일은 Thread.Sleep와 비슷한 Task.Delay라는 메서드를 사용할 수있는 비동기식 메서드입니다. 대신 스레드를 절전 모드로 전환하는 대신 제어권을 다시 지정된 시간이 끝나면 메소드를 호출하고 리턴합니다. 이 수행을 필요로 무엇

비동기 같은 방법으로 표시입니다 :

async Task FooMethod 

및 코드 내부를, 당신이 사용하는 것 :

private async void AwesomeButton_Click(object sender, EventArgs e) 
    { 
    doorLocked.FillColor = Color.Red; 
    doorLight.FillColor = Color.SpringGreen; 
    doorLockedImage.Visible = true; 
    var cancellationToken = new CancellationTokenSource().Token; 
    await Task.Delay(AmountOfMillisecondsHere, cancellationToken); 
    } 

을 그런 다음 호출 할 수 있습니다 cancellationToken.Cancel ()를 클릭하여 작업을 중단합니다.

+0

어떻게 대기를 중지 할 수 있습니까? – svick

+0

편집 내 대답 –

+0

버튼 클릭으로 이것을 언급하는 것을 잊어 버렸습니다! 그래서 어떻게 보일까요? :) – user3555033

관련 문제