Dobrý večer, rád bych Vás poprosil o radu. Zde je testovací příklad: VS 2010 .NET 3.5 Mějme formulář Form1, na něm dvě tlačítka Button1 a Button2, a ListView1. U ListView jsou nastaveny vlastnosti View = Details a CheckBoxes = True
Imports System.ComponentModel
Public Class Form1
Private Sub BackgroundWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim currentXml_ As New XDocument
currentXml_.Add(New XElement("Root"))
currentXml_.Element("Root").Add(New XElement("Item", New XElement("Name", "value 1")))
currentXml_.Element("Root").Add(New XElement("Item", New XElement("Name", "value 2")))
currentXml_.Element("Root").Add(New XElement("Item", New XElement("Name", "value 3")))
Dim items As New List(Of ListViewItem)
For Each node As XElement In (From nodes As XElement In currentXml_.Descendants("Root").Descendants("Item") Select nodes)
Dim item As New ListViewItem
item.Text = node.Element("Name")
items.Add(item)
Next
e.Result = items.ToArray
End Sub
Private Sub BackgroundWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
Dim result As ListViewItem() = CType(e.Result, ListViewItem())
ListView1.Items.Clear()
ListView1.Items.AddRange(result)
End Sub
Private Sub GenerateXML()
Dim appThread As New BackgroundWorker
AddHandler appThread.DoWork, AddressOf BackgroundWorker_DoWork
AddHandler appThread.RunWorkerCompleted, AddressOf BackgroundWorker_RunWorkerCompleted
appThread.RunWorkerAsync()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GenerateXML()
End Sub
Private Sub ListView1_ItemChecked(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles ListView1.ItemChecked
Button2.Enabled = ((From lvi As ListViewItem In ListView1.Items Where lvi.Checked Select lvi).Count > 0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
GenerateXML()
End Sub
End Class
Jedná se o silně zjednodušený příklad, ale problém je zde patrný. Spuštění aplikace proběhne správně. Chyba nastane v metodě ListView1_ItemChecked po stisku tlačítka Button1, ale pouze v případě, kdy jsou v metodě BackgroundWorker_RunWorkerCompleted odstraněny položky ListView.
ListView1.Items.Clear()
Možná jsem něco přehlédnul, ale nevím si s tím rady. Za každou radu budu vděčný. Díky a přeji příjemný večer Dufek
|