2016-11-23 31 views
0

替換出現之後(ShowWindow法)Window隱藏後自動5秒。它也可以手動隱藏(HideWindow方法)。這是我目前的實施。CancellationTokenSource適當與新

問題:當我打開然後手動關閉窗口某些時候行,然後它立即隱藏到1秒後打開。它不應該通過設計。原因是我用新的替換了CTS,並且從不要求取消。我的CTS技能很差,不能理解如何正確實施。

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。如果你不想取消它,你可以使用canceltoken.none(v = vs.110).aspx)。 – stuartd

回答

2

因爲ShowWindowHideErrorWindowCTS,它看起來在新更新取消標記源,沒有對應的CTS當時的令牌時顯示窗口。只要抓住阿霍德該令牌和您等待之前將其存儲在一個局部變量,這樣即使HideErrorWindowCTS變化,你仍然有同樣的道理,檢查延時結束後。

+0

這就是我需要的,謝謝! – AsValeO