終了していないタスクで奇妙な動作が発生しました。私はこれをずっと使用していますが、私はそれを渡しているのでフォームを変更する選択とリストボックスをリフレッシュすることになるので、おそらくそのスタックがそこにありますが、わかりません。タスクが実行中で終了できません
これは私がタスクで実行させたいサブです:
Public Sub UnselectExistingConnectionsItems()
Dim SentenceId, SubSubKategorieId, SubSectionId As Integer
SubSectionId = CbSubSections.SelectedValue 'combobox
If WithSubSubkategorie = SubSubKategorieEnum.Without Then
SubSubKategorieId = 0
Else
SubSubKategorieId = CbSubSubKategorie.SelectedValue 'combobox
End If
Unselect:
For i As Integer = 0 To LB_Sentences.SelectedItems.Count - 1
Dim sKey As ListBoxItem
sKey = LB_Sentences.SelectedItems(i)
SentenceId = HtmlDescription.HtmlSentence.GetSentenceIdByName(sKey.Text)
If HtmlDescription.HtmlSubSubSections_Sentences.CheckIfConnectionAlreadyExist(SentenceId, SubSectionId, SubSubKategorieId) Then
sKey.IsSelected = False
LB_Sentences.Refresh()
GoTo Unselect
End If
Next
End Sub
私はこのようなタスクにそれを置く:
Dim pic As New FrmCircularProgress(eCircularProgressType.Line)
Dim work As Task = Task.Factory.StartNew(Sub()
'--Run lenghty task UnselectExistingConnectionsItems()
'--Close form once done (on GUI thread)
pic.Invoke(New Action(Sub() pic.StopCircular()))
pic.Invoke(New Action(Sub() pic.Close()))
End Sub)
'--Show the form
pic.ShowDialog()
Task.WaitAll(work)
とFrmCircularProgressがちょうどフォーム(iはコードを見てみましょう私はこのparticuralケース以外にも、ユーザーの待ち時間とその作業に持っている場合)、ほぼどこにでもそれを使用する:
何共同Public Class FrmCircularProgress
Sub New(progressType As DevComponents.DotNetBar.eCircularProgressType)
InitializeComponent()
CircularProgress1.ProgressBarType = progressType
StartCircular()
End Sub
Public Sub StartCircular()
Me.CircularProgress1.IsRunning = True
End Sub
Public Sub StopCircular()
Me.CircularProgress1.IsRunning = False
End Sub
End Class
uldが間違っている?プロシージャはリストボックスやコンボボックスと対話しているからですか?それを修正する方法があれば、リストボックスとコンボボックスを呼び出す方法を読んでいますが、それを修正する方法はわかりません。
EDIT: は、私はこれらの線以外に思う:
sKey.IsSelected = False
LB_Sentences.Refresh()
が、私はそれらを行う必要があります。
LB_Sentences.Invoke(Sub() sKey.IsSelected = False
End Sub)
LB_Sentences.Invoke(Sub() LB_Sentences.Refresh()
End Sub)
私は切り抜いたスレッドでだから。どういうわけかそれらの行を変換する方法はわかりません:
SubSectionId = CbSubSections.SelectedValue
SubSubKategorieId = CbSubSubKategorie.SelectedValue
おそらくループも呼び出される必要があります。あなたの助けを待っている。