Forum » Programiranje » [VB] backgroundworker1
[VB] backgroundworker1
korenje3 ::
Rad bi naredil da mi updejta dataset preko mysql povezave v backgroundworker1. Se komu sanja kako to narediti?
To pa zato, da v primeru izpada povezave ne blokira program.
A je možno poskati dataset tabelo kot argument v background worker?
V primeru če tako naredim, vidim v datagridview samo 1 vrstico. Neki eni gumbi ne delajo. Če sortiram mi prikaže vse elemente v datagridview1 form. V čem je haklc?
To pa zato, da v primeru izpada povezave ne blokira program.
Sub reloadlist()
If Me.BackgroundWorker1.IsBusy = False Then
'cleandatasetu()
Me.BackgroundWorker1.RunWorkerAsync({fxts.datasetu.Tables("users")})
Else
fxts.infobox("SQL localDB UPDATE: Backgroundworker is bussy. Try again.")
End If
Exit Sub
Try
cleandatasetu()
adapter_users.Fill(fxts.datasetu.Tables("users"))
Catch ex As Exception
fxts.infobox("SQL localDB update: " & ex.Message.ToString)
End Try
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Try adapter_users.Fill(e.Argument(0)) Catch ex As Exception MsgBox("SQL localDB update: " & ex.Message.ToString) End Try End Sub
A je možno poskati dataset tabelo kot argument v background worker?
V primeru če tako naredim, vidim v datagridview samo 1 vrstico. Neki eni gumbi ne delajo. Če sortiram mi prikaže vse elemente v datagridview1 form. V čem je haklc?
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
korenje3 ::
Pa še to me zanima...
zadebo bi rad dodal takole brez generiranje array liste.
lala.DataSource = {array_list}
Imam pa arraylist za recimo "test" v katerem imam elemente "a", "b"...
jaz bi pa sedaj rad dodal v {array_list} slednje: a.name, b.name,...
Kako se to lahko naredi v eni vrstici?
zadebo bi rad dodal takole brez generiranje array liste.
lala.DataSource = {array_list}
Imam pa arraylist za recimo "test" v katerem imam elemente "a", "b"...
jaz bi pa sedaj rad dodal v {array_list} slednje: a.name, b.name,...
Kako se to lahko naredi v eni vrstici?
i9-12900k; 32GB DDR5-6000 CL36; Nvidia RTX 3080 ti;
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Gigabyte Aorus z690 master; Be Quiet Dark Power 12 1000W
Looooooka ::
background worder ima event znotraj katerega bi moral delati stvari kot so error okna in podobne bedarije, torej si ze v zacetku "zlorabil" background worker.
To, da iz background workerja uporabljas objekt, ki si ga naredil na formi(adapter_users) tud ne vem ce je pametno, ker adapter_users verjetno uporablja konekcijo, ki si jo prav tako naredil na formi.
Bolj pravilno bi blo to, da background workerju vse parametre, ki jih potrebujes podas kot parameter preden ga zazenes.
Ta potem vse kar rabi naredi in zazene znotraj DoWork eventa. Rezultate in progress spet vracas nazaj na gui z metodo, ki je temu namenjena(ne vem na pamet ampak bgworker ima metodo, ki bo potem na gui threadu dvignila event reportprogress oz nekaj podobnega).
Tako program "ne bo freezal".
Ce bos tist progressevent dvigal za vsako bedarijo(recimo na 100 ms) bo program vseeno "freezal". Zato je pametno, da se tudi tam malce kontroliras.
Ko zadevo koncas...rezultat tik pred koncem spet vrnes nazaj s to reportprogress metodo.
Obenem se ti pa ob koncu dvigne tudi event, ki ti pove, da je background worker koncal z delom.
Izogibaj se msgboxanju znotraj dowork eventa. Ce ze moras kaj updejtat na gui-ju uporabi report progress ALI pa invoke metodo na komponenti(ker drugace bos dobil lep exception, da je nek xy thread poskusal invokat kontrolo).
To, da iz background workerja uporabljas objekt, ki si ga naredil na formi(adapter_users) tud ne vem ce je pametno, ker adapter_users verjetno uporablja konekcijo, ki si jo prav tako naredil na formi.
Bolj pravilno bi blo to, da background workerju vse parametre, ki jih potrebujes podas kot parameter preden ga zazenes.
Ta potem vse kar rabi naredi in zazene znotraj DoWork eventa. Rezultate in progress spet vracas nazaj na gui z metodo, ki je temu namenjena(ne vem na pamet ampak bgworker ima metodo, ki bo potem na gui threadu dvignila event reportprogress oz nekaj podobnega).
Tako program "ne bo freezal".
Ce bos tist progressevent dvigal za vsako bedarijo(recimo na 100 ms) bo program vseeno "freezal". Zato je pametno, da se tudi tam malce kontroliras.
Ko zadevo koncas...rezultat tik pred koncem spet vrnes nazaj s to reportprogress metodo.
Obenem se ti pa ob koncu dvigne tudi event, ki ti pove, da je background worker koncal z delom.
Izogibaj se msgboxanju znotraj dowork eventa. Ce ze moras kaj updejtat na gui-ju uporabi report progress ALI pa invoke metodo na komponenti(ker drugace bos dobil lep exception, da je nek xy thread poskusal invokat kontrolo).
Zgodovina sprememb…
- spremenilo: Looooooka ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [VB] datagridviewOddelek: Programiranje | 1954 (1337) | korenje3 |
» | C# threadanje in guiOddelek: Programiranje | 786 (677) | darkolord |
» | Vprasanje glede koncepta programa [c#]Oddelek: Programiranje | 2074 (1816) | _Dormage_ |
» | [c#] Vprasanje glede BackGroundWorker classa in spreminanja gui elementaOddelek: Programiranje | 795 (721) | Ericssony |
» | C# BackgroundWorker Class problemOddelek: Programiranje | 1271 (1227) | hendriks |