2010-10-21 45 views
2

這可能是共享變量的一般問題,但這裏有。我正在網頁上使用GridView來編輯每個作業,我需要連接到每個'rowbound'事件以從jobDataMap獲取一些數據。從另一種方法(Quartz.NET)獲取調度器。或者一般方法問題

無論如何,調度程序在Page_Load方法啓動(創建我可以用來訪問信息的變量sched),但是從任何其他事件/方法我無法訪問調度變量。我如何讓自己做到這一點?

感謝

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType != DataControlRowType.Header) 
      { 
       var schedulerFactory = new StdSchedulerFactory(); 
       IScheduler sched = schedulerFactory.GetScheduler(); 


       string schedID = sched.SchedulerInstanceId; 
       string id = e.Row.Cells[0].Text; 
       string groupid = e.Row.Cells[1].Text; 

       JobDetail jobDetail = sched.GetJobDetail(id, groupid); 
       Trigger[] trigger = sched.GetTriggersOfJob(id, groupid); 
       JobDataMap dataMap = jobDetail.JobDataMap; 

       e.Row.Cells[3].Text = dataMap.GetString("nameid"); 
      } 
        } 

回答

2

您可以使用下面的代碼是:

var schedulerFactory = new StdSchedulerFactory(); 
IScheduler scheduler = schedulerFactory.GetScheduler(); 

如果您的調度有一個特定的名字,有一個接受字符串名稱的GetScheduler過載。

或者你可以使用下列內容:

IScheduler scheduler = 
    SchedulerRepository.Instance.Lookup("DefaultQuartzScheduler"); 
+0

乾杯哥們,它告訴我「計劃名爲‘DefaultQuartzScheduler’已經存在,雖然:( – Chris 2010-10-21 13:03:56

+0

這是奇怪的,我使用完全相同的兩行代碼在一個項目中,這個工程,但我增加了另一種方式來獲得相同的結果 – 2010-10-21 13:54:40

+0

現在我收到對象引用錯誤,無論我做什麼......嗯,我編輯我的問題與我使用的代碼,也許我做錯了什麼,我試圖創建一個ASP.NET頁面,在那裏他們可以編輯數據映射中的作業細節。 – Chris 2010-10-21 14:20:43

1
@see 
source StdSchedulerFactory.cs 

line 373 string schedName = cfg.GetStringProperty(PropertySchedulerInstanceName, "QuartzScheduler"); 

so IScheduler scheduler = 
    SchedulerRepository.Instance.Lookup("QuartzScheduler"); is default 
+0

quartz.net v2.3 – Pigwing 2014-11-15 04:46:16

相關問題