2013-07-03 60 views
1

假設以下情形:
我有一個視圖模型,應該在特定延遲後自動關閉自身。安排在特定對象實例上工作的一次性工作

事情是這樣的:

public AutoCloseViewModel : ViewModelBase 
{ 
    public void Close() 
    { 
     /* perform actions necessary to close 
      the view model and its associated view */ 
    } 

    protected override OnActivate() 
    { 
     // schedule job that calls Close on this instance, something like 
     var trigger = TriggerBuilder.Create()...; 
     trigger.Job = new DelegateJob(() => Close()); // <---- 
     scheduler.ScheduleJob(trigger); 
    } 
} 

trigger.Job = new DelegateJob(() => Close());顯然是行不通的,因爲以下原因,:

  1. 存在着對ITrigger沒有Job財產。
  2. 作業類應該是可序列化的。

問:
有沒有辦法做什麼,我想用Quartz.net做還是我試圖用它的東西,它不是設計的呢?

順便說一句:我知道this question,但對我來說,它看起來像接受的答案濫用Quartz.net和其他答案不會幫助我。

+0

簡單的定時器怎麼樣? –

+0

@亨克·霍特曼:當然,那會奏效。它只是有問題,它使我的視圖模型異步,很難進行單元測試。因爲我在應用程序中有其他重複的任務,所以我想過介紹一個調度程序並將它用於所有這些「稍後執行」的要求。 –

回答

0

對於這種情況,我同意計時器應該是首選的方式。我覺得爲此目的的調度器會讓事情變得複雜。

使用調度程序或計時器都會使異步的東西。

如果您確實想要使用調度程序,您可以使用[Messenger]發送給定作業已完成的消息並在視圖模型中註冊該消息,從而與視圖模型進行通信。 1

相關問題