2011-01-27 57 views
-1

我得到的對象未設置爲對象錯誤的實例。我已經列出了所有消息應該顯示的列表視圖。我使用lumisoft sample code我移植到VB.NETVB.net:對象未設置爲對象的實例

Private Sub FillMessagesList() 
     Me.Cursor = Cursors.WaitCursor 
     Try 
      Dim m_pPop3 As POP3_Client = Nothing 
      For Each message As POP3_ClientMessage In m_pPop3.Messages 
       Dim mime As Mail_Message = Mail_Message.ParseFromByte(message.HeaderToByte()) 

       Dim item As New ListViewItem() 
       If mime.From IsNot Nothing Then 
        item.Text = mime.From.ToString() 
       Else 
        item.Text = "<none>" 
       End If 

       If String.IsNullOrEmpty(mime.Subject) Then 
        item.SubItems.Add("<none>") 
       Else 
        item.SubItems.Add(mime.Subject) 
       End If 

       item.SubItems.Add(mime.[Date].ToString()) 
       item.SubItems.Add(CDec(message.Size/CDec(1000)).ToString("f2") & " kb") 
       item.Tag = message 
       ListView1.Items.Add(item) 
      Next 
     Catch x As Exception 
      MessageBox.Show(Me, "Errorssssss: " + x.Message) 
     End Try 
     Me.Cursor = Cursors.[Default] 
    End Sub 
+0

逐步通過它,看看哪一行是拋出異常。你可能會從那裏弄清楚它。 – 2011-01-27 20:43:21

+0

嗯,我試過了,我認爲Dim item As New ListViewItem()............如果發生錯誤 – 2011-01-27 20:45:05

+0

該行不會創建NullReferenceException。這種異常類型通常是一個「點」異常,其中您要放的點是空的。下面的答案似乎是正確的。 – 2011-01-27 20:52:52

回答

1

的問題是在這裏:

Dim m_pPop3 As POP3_Client = Nothing 
For Each message As POP3_ClientMessage In m_pPop3.Messages 

您設置m_pPop3爲Nothing,然後嘗試訪問其成員之一。

你說你移植的代碼 - 也許你需要在原代碼和端口它正確地回頭看:

private POP3_Client m_pPop3 = null; 

/// <summary> 
/// Default constructor. 
/// </summary> 
public wfrm_Main() 
{ 
    InitUI(); 

    this.Visible = true; 

    wfrm_Connect frm = new wfrm_Connect(
     new EventHandler<WriteLogEventArgs>(Pop3_WriteLog)); 
    if(frm.ShowDialog(this) == DialogResult.OK){ 
     m_pPop3 = frm.POP3; 
    // etc... 
} 

private void FillMessagesList() 
{ 
    this.Cursor = Cursors.WaitCursor; 
    try{ 
     foreach(POP3_ClientMessage message in m_pPop3.Messages){ 
     // etc... 
    } 
} 

注意m_pPop3.Messages是一個私有成員在這裏,不是一個局部變量,你必須實施它。

要更正您的代碼,我建議將其更改爲與原始更類似。將本地變量更改爲私有成員,並將其設置在構造函數中,就像原始C#代碼一樣。

0

罪魁禍首可能是從2行的代碼:

Dim m_pPop3 As POP3_Client = Nothing 
      For Each message As POP3_ClientMessage In m_pPop3.Messages 

你通過「m_pPop3」消息試圖循環,但您已明確將其設置爲沒有上線正上方。

0

我猜這是因爲你將m_pPop3設置爲Nothing。如果你通過代碼,它會告訴你。

Dim m_pPop3 As POP3_Client = Nothing 
For Each message As POP3_ClientMessage In m_pPop3.Messages 
相關問題