ผู้ตอบมากที่สุด
เกิด Error ขึ้นขณะเรียกใช้งาน Collection

คำถาม
-
ผมเขียนโปรแกรมที่เป็นแบบ 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 ที่เกิดขึ้น
คำตอบ
-
สวัสดีค่ะ คุณ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
ตอบทั้งหมด
-
สวัสดีค่ะ คุณ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.
-
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 เลยครับ
-
สวัสดีค่ะ คุณ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