mySmsService   是windows的一個主服務, startSend是一個類,在同一個命名空間下面。
ifHaveSend()是startSend的一個public方法 private void sendBookingSMS() 也是startSend的一個private 方法。mySmsService   的定時事件。
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
function fun = new function();
fun.ErrorMsg("開始");
this.timer1.Enabled = false;
startSend ssend = new startSend();
ssend.ifHaveSend();
this.timer1.Enabled = true;
}當調用ssend.ifHaveSend();
當條件成立的時候 在ifHaveSend()方法中調用 本類的private方法 sendBookingSMS 。
剛開始部署。的時候本服務一直沒有按照預期的執行。無奈用try catch追蹤到當ifHaveSend條件成立調用本類的方法sendBookingSMS 的時候。並把錯誤日志寫入到txt文件中。發現錯誤信息。大體如下“未將對象的應用綁定到對象的執行個體。”這個錯誤讓我百思不得其解,如果誰有這方面的經驗請告訴我。追蹤代碼如下try
{
sendBookingSMS();
}
catch(Exception ex)
{
fun.ErrorMsg(ex.ToString());
}

解决方案 »

  1.   

    如果你用的是Form下的timer是有此问题。建议你改用“System.Timers.Timer”或者“System.Threading.Timer”这两个组件。不过,我不太喜欢在service中用timer,你用子线程来实现会更好。
      

  2.   

    我用的是this.timer1 = new System.Timers.Timer(); 
    用的是System.Timers.Timer
      

  3.   

    knight 請問如果用線程的話我怎麼定時一分鐘檢測一次呢?
      

  4.   

    先确定是否在winform下你的程序正确?
    如果正确。
    确定windows service下与winform程序的环境是否一致,例如配置文件,执行程序权限等
      

  5.   

    我全不在winfrom下測試過了所有的類(程序的工作全是在這些類中完成的)。所以才搬到windows中來的。並且環境是一樣的。這些就放心好了。
      

  6.   

    Thread.Sleep();最大值是多少呢?
      

  7.   

    to Thread.Sleep();最大值是多少呢?可以使用TimeSpan作为参数,应该能满足你的要求。
      

  8.   

    你可以在“ssend.ifHaveSend();”,即ifHaveSend看看,那些语句有问题(在service环境下)
      

  9.   

    把 this.timer1.Enabled = false; 改为 this.timer1.interval=0;
       this.timer1.Enabled = true;  改为 this.timer1.interval=60000;
    试试看呢,以前碰到过不能用enable属性的情况
      

  10.   

    把 this.timer1.Enabled = false; 改为 this.timer1.interval=0;
       this.timer1.Enabled = true;  改为 this.timer1.interval=60000;
    试试看呢,以前碰到过不能用enable属性的情况
    也可以enable
    只不过要用两个timer
      

  11.   

    //-----------------------------------------------------------------------------------------------------------
    用線程也會出項這個問題。
    //時間:2006/7/21 下午 02:03:50
    //描述:
    System.NullReferenceException: 並未將物件參考設定為物件的執行個體
       at SmsWindowsService.startSend.sendBookingSMS(String shopid, String cardno, String Totel1, String Totel2, String smscase, String BookSendDate, String BookSendTime, String SendRule, String SendPar, String LastSendDate, String ID, String BookMan, String BookDate, String BookTime, String smsty)
       at SmsWindowsService.startSend.ifHaveSend()
    //-----------------------------------------------------------------------------------------------------------
      

  12.   

    我將這個方法的源碼貼出來。
    #region/// 是檢查是否有需要發送的息 如果有則開始傳送簡訊
    public void ifHaveSend()
    {
    string shopid="",cardno="",Totel1="",Totel2="",smscase="",BookSendDate="",BookSendTime="",SendRule="",SendPar="",LastSendDate="",ID="",BookMan="",BookDate="",BookTime="",smsty="";
    function fun = new function("conStr");
    //將需要傳送信息的數據取出放入表中
    string sqlStr = "SELECT shopid,cardno,Totel1,Totel2,smscase,BookSendDate,BookSendTime,SendRule,SendPar,LastSendDate,ID,BookMan,BookDate,BookTime,smsty FROM SendInfo";
    DataTable myTb = new DataTable(); fun = new function("conStr");
    fun.ReDataTable(ref myTb,sqlStr,"");
    int n = myTb.Rows.Count; #region
    for(int i=0;i<n;i++)
    {
    shopid=myTb.Rows[i][0].ToString().Trim();
    cardno=myTb.Rows[i][1].ToString().Trim();
    Totel1=myTb.Rows[i][2].ToString().Trim();
    Totel2=myTb.Rows[i][3].ToString().Trim();
    smscase=myTb.Rows[i][4].ToString().Trim();
    BookSendDate=myTb.Rows[i][5].ToString().Trim();
    BookSendTime=myTb.Rows[i][6].ToString().Trim();
    SendRule=myTb.Rows[i][7].ToString().Trim();
    SendPar=myTb.Rows[i][8].ToString().Trim(); if(myTb.Rows[i][9].ToString().Trim() != "")
    LastSendDate = myTb.Rows[i][9].ToString().Trim();
    else
    LastSendDate = "1900/01/01"; ID = myTb.Rows[i][10].ToString().Trim();
    BookMan = myTb.Rows[i][11].ToString().Trim();
    if(myTb.Rows[i][12].ToString().Trim() != "")
    BookDate = Convert.ToDateTime(myTb.Rows[i][12]).ToString("yyyy/MM/dd");
    else
    BookDate = "1900/01/01"; if(myTb.Rows[i][13].ToString().Trim() != "")
    BookTime = Convert.ToDateTime(myTb.Rows[i][13]).ToString("HH:mm:ss");
    else
    BookTime = "00:00:00";
    smsty = myTb.Rows[i][14].ToString();
    try
    {
    sendBookingSMS(shopid,cardno,Totel1,Totel2,smscase,BookSendDate,BookSendTime,SendRule,SendPar,LastSendDate,ID,BookMan,BookDate,BookTime,smsty);
    }
    catch(Exception ex)
    {
    fun.ErrorMsg(ex.ToString());
    }
    }
    #endregion }
    #endregion
      

  13.   

    你最好加入debug信息,看看哪些语句出错。