none
เกิด Error ขึ้นขณะเรียกใช้งาน Collection RRS feed

  • คำถาม

  • ผมเขียนโปรแกรมที่เป็นแบบ Remoting Object โดยมีการเขียนเอาไว้เป็น windows service ซึ่งในตัวโปรแกรมจะมีการเก็บข้อมูลเอาไว้ในลักษณะ collection ในตัวแปรที่ประกาศไว้เป็น shared

    ปัญหาที่เกิดขึ้นก็คือ เมื่อเปิด service ทิ้งไว้นานๆ โดยไม่ได้เข้าใช้ เมื่อถึงเวลาจะเข้าใช้จะเกิด Error ขึ้นมาว่า object reference not set เวลาใช้คำสั่ง Collection.Remove เพื่อลบข้อมูลที่อยู่ใน Collection

    พอลองทำ stacktrace แล้วมันจะเข้าไปตายที่คำสั่ง

    Microsoft.VisualBasic.Collection.AdjustEnumeratorsHelper (Node NewOrRemovedNode, AdjustIndexType Type)

    ซึ่งทำให้ไม่สามารถตรวจสอบอะไรต่อได้ แต่พอลอง Restart Service แล้ว Error นี้ก็จะหายไป แต่อีกสักพักก็จะกลับมาเป็นอีก

    พอจะตอบได้หรือไม่ครับว่าอาการนี้เกิดจากอะไรได้บ้าง เพราะตอนแรกเข้าใจว่าตัวแปรถูกทำลาย ก็เลยลองแกล้งทำให้เป็น nothing แต่ stacktrace ที่ได้ก็ไม่เหมือนกับ error ที่เกิดขึ้น

    25 กุมภาพันธ์ 2554 10:05

คำตอบ

  • สวัสดีค่ะ คุณKrailit

    ทดลองใช้ Collection.Clear Method ดูค่ะ ให้ delete ทุก element ของ Visual Basic Collection object เลย
    ถ้ายังไงลองดูบทความใน
    Collections in Visual Basic .NET กับ article ซึ่งจะอธิบายเกี่ยวกับเบสิคของ .net collections ใน C#
    และถ้าต้องการเปลี่ยนภาษาจาก C# เป็น VB.Net ให้ดูที่ site นี้เลยค่ะ

    สำหรับ error ที่บอกว่า "object reference not set" ที่เกิดตอนใช้ "Collection.Remove"
    รบกวนขอโค้ดทั้งหมดด้วยค่ะ จะได้ช่วยหาสาเหตุว่าผิดที่ตรงไหนค่ะ

     


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

     

    • เสนอเป็นคำตอบโดย supa_sModerator 11 มีนาคม 2554 8:55
    • ทำเครื่องหมายเป็นคำตอบโดย Sirikhun TriwittayakhunModerator 11 พฤษภาคม 2554 1:43
    3 มีนาคม 2554 8:15
    ผู้ดูแล

ตอบทั้งหมด

  • สวัสดีค่ะ คุณKrailit

    รบกวนขอ Sample code ที่ใช้ได้ไหมค่ะ เพื่อจะได้บอกสาเหตุได้ชัดเจนมากขึ้น


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    28 กุมภาพันธ์ 2554 6:44
    ผู้ดูแล
  • Shared sLogOnUsers As New Collection

    Public Function ClearUser(ByVal UserId As String) As Boolean
            If sLogOnUsers.Contains(UserId.ToUpper) Then
                sLogOnUsers.Remove(UserId.ToUpper)
                Return True
            Else
                Return False
            End If
    End Function

     

    นี่คือโค้ดในส่วนที่เกิด error ขึ้นครับ

    ผมลองกำหนดให้ sLogOnUsers เป็น Nothing หรือ สั่ง Remove Key ที่ไม่มีใน collection

    error ที่ stacktrace ได้ออกมาก็ไม่ได้เข้าไปตายที่ AdjustEnumeratorsHelper เลยครับ

    28 กุมภาพันธ์ 2554 7:45
  • สวัสดีค่ะ คุณKrailit

    ทดลองใช้ Collection.Clear Method ดูค่ะ ให้ delete ทุก element ของ Visual Basic Collection object เลย
    ถ้ายังไงลองดูบทความใน
    Collections in Visual Basic .NET กับ article ซึ่งจะอธิบายเกี่ยวกับเบสิคของ .net collections ใน C#
    และถ้าต้องการเปลี่ยนภาษาจาก C# เป็น VB.Net ให้ดูที่ site นี้เลยค่ะ

    สำหรับ error ที่บอกว่า "object reference not set" ที่เกิดตอนใช้ "Collection.Remove"
    รบกวนขอโค้ดทั้งหมดด้วยค่ะ จะได้ช่วยหาสาเหตุว่าผิดที่ตรงไหนค่ะ

     


    Supa Sethasiripong [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

     

    • เสนอเป็นคำตอบโดย supa_sModerator 11 มีนาคม 2554 8:55
    • ทำเครื่องหมายเป็นคำตอบโดย Sirikhun TriwittayakhunModerator 11 พฤษภาคม 2554 1:43
    3 มีนาคม 2554 8:15
    ผู้ดูแล