2016-11-23 6 views
0

Window은 표시된 후 5 초 후에 자동으로 숨 깁니다 (ShowWindow 방법). 또한 수동으로 숨길 수도 있습니다 (HideWindow 메소드). 다음은 현재 구현 된 내용입니다.CancellationTokenSource가 새 것으로 바뀌십시오

문제 : 수동으로 열어 본 다음 몇 번 수동으로 창을 닫으면 열 때 1 초 후 즉시 숨 깁니다. 의도적으로해서는 안됩니다. 그 이유는 CTS를 새로운 것으로 바꾸고 취소를 요청하지 않기 때문입니다. 나는 CTS와의 기술이 좋지 않아 이것을 올바르게 구현하는 방법을 염두에 두지 않는다. ShowWindowHideErrorWindowCTS에서 보이는 때문에

public class Window 
    { 
     public bool Visible { get; set; } 
     public CancellationTokenSource HideErrorWindowCTS { get; set; } 

     public async void ShowWindow() 
     { 
      Visible = true; 
      await Task.Delay(TimeSpan.FromSeconds(5)); 
      if (!HideErrorWindowCTS.IsCancellationRequested) 
      { 
       Visible = false; 
      } 
     } 

     public void HideWindow() 
     { 
      HideErrorWindowCTS.Cancel(); 
      HideErrorWindowCTS = new CancellationTokenSource(); 
      Visible = false; 
     } 
    } 
+1

토큰 소스가 아닌 메서드에 _token_을 전달해야합니다. ['CancellationToken.None'] (https://msdn.microsoft.com/en-us/library/system.threading)을 사용할 수 있습니다. cancelationtoken.none (v = vs.110) .aspx)을 클릭하십시오. – stuartd

답변

2

, 그것은 새로 업데이트 된 취소 토큰 소스에서 찾고,시 CTS에 해당하지 토큰은 창을 보여 주었다. 해당 토큰을 잡고 로컬 변수 에 저장하기 전에 기다리십시오. 따라서 HideErrorWindowCTS이 변경 되더라도 지연이 완료된 후에도 동일한 토큰을 유지할 수 있습니다.

+0

그게 내가 필요한거야, 고마워! – AsValeO