我得到一个Object未设置为对象错误的实例。我已经列出了一个列表视图,其中应显示所有消息。我正在使用移植到vb.net的lumisoft sample code
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 :(得分: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#代码一样。
答案 1 :(得分:0)
罪魁祸首可能来自两行代码:
Dim m_pPop3 As POP3_Client = Nothing
For Each message As POP3_ClientMessage In m_pPop3.Messages
您正在尝试遍历“m_pPop3”中的消息,但您已明确将其设置为直接位于上方的行。
答案 2 :(得分:0)
我猜它就在这里,因为你将m_pPop3设置为Nothing。如果您已经完成了代码,它会告诉您。
Dim m_pPop3 As POP3_Client = Nothing
For Each message As POP3_ClientMessage In m_pPop3.Messages