» »

[UWP] [C#]

[UWP] [C#]

BivšiUser2 ::

Kako se pravilno kliče funkcija, ki je tipa async Task?
imam dve metode
private async Task delo1()
{
//koda 1
}
private async Task delo2()
{
//koda2
}

Eno kličem v konstruktorju, drugo pa v eventu, ki se zgodi na button_click.
Visual Studio mi javi, da moram pred klicom Task-a, dati await, vendar, ko to naredim mi teži nekaj z rdečo barvo, kar pa ne razumem ravno. Kako pravilno klicati async Task metode?
SloTech - če nisi z nami, si persona non grata.

xmetallic ::

To z rdečo ti verjetno teži, da ne moreš uporabiti await v non-async funkciji. Stack Overflow is your bf.

Zgodovina sprememb…

  • spremenilo: xmetallic ()

BivšiUser2 ::

http://prntscr.com/ejzutb - saj mi brez awaita program gre skozi, samo pomoje ni ravno dobra praksa ingnorirati to kar ti VS podčrta z zeleno.
SloTech - če nisi z nami, si persona non grata.

SloSlayer ::

BivšiUser2 je izjavil:


Visual Studio mi javi, da moram pred klicom Task-a, dati await, vendar, ko to naredim mi teži nekaj z rdečo barvo, kar pa ne razumem ravno. Kako pravilno klicati async Task metode?


Da bi pa objavil besedilo error sporočila pa ti ni padlo na pamet?

BivšiUser2 ::

V bistvu bi že moral na začetku tako povedati, da mi teži, da await operator ne more biti v non async metodi, če pa await zbrišem, program sicer deluje vendar me opozori, da je pravilna koda z await operatorjem pred.
SloTech - če nisi z nami, si persona non grata.

xmetallic ::

Glede asynca v konstruktorju http://stackoverflow.com/a/8145668

Looooooka ::

Uporabi void, kjer nimas async kode. Vse ostalo napisi z uporabo taskov. Vecina funkcij ima po novem identicne funkcije z async v imenu in te lahko awaitas. Ce klices iz navadne funkcije lahko klices Task.Run(async()=>{await blabla();}). GetWaiter().GetResult();
Pisem z glave na telefonu tako, da preveri.
Plus ce tole naredis iz kode, ki laufa na istem dispatcherju zna pridt do locka tako, da rajsi lepo povsod pisi kodo na nacin kot naj bi se pisal, ko zelis delat u async in taski.

Stari89 ::

Async v konstruktorju je no-go.
Lahko bi sprožil async void metodo, ampak to je igranje z ognjem, saj ne veš, kdaj se async void konča in kaj se tist čas dogaja s spremenljivkami. Primer:
public class SomeObject {
   public string text;
   public SomeObject() {
      ReadText();
   }
   private async void ReadText() {
      using (var reader = File.OpenText("SomeFile.txt")) {
         text = await reader.ReadToEndAsync();
      }
   }
}

public class Program {
   private void Main() {
      SomeObject anObject = new SomeObject();
      Console.WriteLine(anObject.text);     // Tu nastane problem, ker ni šans, da boš vedel, če je fajl že prebran ali ne.
   }
}

Malce boljši način:
public class SomeObject {
   public string text;
   public SomeObject() {   }
   public async Task ReadText() {
      using (var reader = File.OpenText("SomeFile.txt")) {
         text = await reader.ReadToEndAsync();
      }
   }
}

public class Program {
   private async void Main() {
      SomeObject anObject = new SomeObject();
      await anObject.ReadText();
      Console.WriteLine(anObject.text);     // Ker smo awaitali, vemo, da se je ReadText() metoda končala in imamo anObject.text na voljo.
   }
}

Tole pišem peš, ziher so vmes napake.

Zgodovina sprememb…

  • spremenilo: Stari89 ()

BivšiUser2 ::

Prebral sem si zgornjo kodo in stran http://blog.stephencleary.com/2013/01/a... pa še vedno ne kapiram nič. Kapiram, da je:
public class MojRazred
{
     public MojRazed()
     {
        whatever a =new whatever();
        a.async_void_ali_task();
     }
   //ostala  koda
}
public class whatever
{
  public async Task kreiraj_XML_datoteko()
   {
    /*koda 
http://stackoverflow.com/questions/26403390/create-xml-file-with-xmlwriter   
*/
   }
}

slaba praksa.
Mi lahko step by step nekdo napiše prosim pravilno kodo, ker se iz teh zapisov nič ne razumem. Sicer mi je teoretično vseeno, dokler se program pravilno prevede in izvede, ampak bi vseeno programiral po pravilih
SloTech - če nisi z nami, si persona non grata.

Lonsarg ::

Zadeva 1: Če hočeš nek task/delo whatever direktno zagnati, potem uporabi static class z static metodami in ne navadnega s konstruktorjem. Point clasov s konstruktorjem je namreč da v konstruktorju inicializiraš class, potem pa preko drugih funkcij v clasu dejansko kaj počneš. Če že hočeš imeti navaden class preimenuj "MojRazred" v "Start" ali nekaj takega, torej ločena metoda.

Zadeva 2: Ko kličeš async funkcije iz async funkcij uporabiš await. Ko pa delaš "prehod" med navadno in async funkcijo pa se moraš malce dodatno pomatrati.
2a: Ena opcija je kar je Looooka napisal (in variacije)
2b: Druga opcija je wrapanje async Task metode v async void, ki se potem kliče iz sihronih funkcij. To je potencialno lahko nevarno in naj bi se uporabljalo zgolj na UI nivoju in nikjer globje. Pač async void je taka praktična top-level async metoda, če je zlorabiš kjerkoli vmes in kličeš iz kake nesihrone kode pa so lahko rezultati zabavni.

Zgodovina sprememb…

  • spremenil: Lonsarg ()

Stari89 ::

@S4NNY1: Ko se kliče funkcijo z await, se v metodi začne nov thread (nit). Če nimaš izkušenj s threadingom, ti toplo priporočam, da se vržeš med knjige in primere, saj je to zelo obširna in kompleksna tema. Menim, da ni šans, da ti bo kdo na forumu to uspel pojasnit v enem postu ter da boš to hitro pokapiral. Nekaj časa sem delal na WinRT in UWP, pa me še sedaj pogosto zj**e.
Await, async, Task in podobno je v bistvu le poenostavljena notacija, s katero ti ni treba na roke štartat threadov, pisat callback metod in podobno. Pomanjkjivost je, da koda na koncu izgleda skoraj preveč enostavno; Začetniku se zdi, da razume kodo, program pa ne dela, saj v UWPju threadi švigajo vsepovsod. Kriv pa je Bill Gates, kot za vse! :P

Zgodovina sprememb…

  • spremenilo: Stari89 ()

BivšiUser2 ::

Sem pred eno veliko dilemo, ki jo po branju na drugih forumih še vedno imam.
Rabim podatke, ki bodo shranjeni lokalno, ne morem pa se odločit ali naj bodo ti shranjeni v SQLite bazo, XML datoteko. Podatki so tako uporabniški kot nastavitve za app.
SloTech - če nisi z nami, si persona non grata.

krneki0001 ::

uporabniške podatke v bazo, nastavitve v XML.

Stari89 ::

krneki0001 je izjavil:

uporabniške podatke v bazo, nastavitve v XML.

2nd that

Lonsarg ::

Eh, če že implementiraš SQLite kot vitalni del aplikacije(in ne nek dodatek, ki lahko crkne brez da uproabnik dosti opazi), potem ni nobenega razloga da ne bi tudi nastavitve tja zapisoval.

Se ti pa samo zaradi nastavitev kaj takega ne splača, če pa je podatkov preveč za en XML potem pa le.

BivšiUser2 ::

Kaj je fora v IDisposable, če C# itak na koncu vse za sabo popuca in ali naj to implementiram v program?
SloTech - če nisi z nami, si persona non grata.

Zgodovina sprememb…

darkolord ::

Popuca managed resourse. Če pa ti sam odpiraš neke unmanaged (npr. win32) handle, jih pa ne bo vedno mogel popucat.

Lonsarg ::

Tudi če si striktno managned ima IDisposable smisel. In sicer celo tri smisle se spomnim na hitro.

- Prvi je da je avtomatski manager resorsov daleč od idealnega in se za vse stvari, ki porabijo večje količine RAMa splača ročno pucat.
- drugi je, da ga lahko uporabiš znotraj "using" bloka(to je idealna uporaba clasov, ki implementirajo IDisposable) in s tem garantiraš da izven tega bloka ni uporabljen že na compiler nivoju(ti ne builda). Torej izogneš se programerski napaki, ko ga kje kasneje uporabiš v kodi in ga posledično avtomatski manager resoursov precej kasneje popuca, oziroma celo nikoli, če ga vsake toliko referenciraš v kasnejši kodi...
- tretji in zelo uporaben pa je, da lahko znotraj metode Dispose spišeš poljubno kodo, ki naprimer počisti temp datoteke, zapira v vrstnem redu kake connectione.... Vsa ta koda se garantirano izvede, ko je ta class disposan, tudi če bo avtomatika tista, ki ga disposa! To kodo seveda v try/catch blok dati, ker nočeš exceptionov med Disposanjem objektov:)

Seveda se za classe, ki ne porabijo dosti resoursov ne splača za brez veze pacati kode z implementacijo IDisposable.

Zgodovina sprememb…

  • spremenil: Lonsarg ()

BivšiUser2 ::

Danes sem nekaj čaral s Nugetom in mi je začuda uspelo vključiti System.Data.SqlClient. Prav tako berem, da se nekaj dogaja glede tega ( komentarji na forumih so stari par dni). Lahko kdo to potrdi?
SloTech - če nisi z nami, si persona non grata.

cekr ::

Pred časom je pisalo, da delajo na tem.
Pri MS-u je bilo prvotno mišljeno, da boš do baze dostopal preko servisov.
Kar sicer ni slabo, če imaš več zadev, ki dostopajo.
Kdor je pa navajen na klasični direktni dostop do baze, se je pa samemu namenu jezil.
Zato je bilo tudi toliko upiranja sami uporabi UWP-a. Sedaj upam, da bo šlo.

Še malo bolj poenostavijo samo poganjanje programov brez Stora pa bo.
Sinclair ZX Spectrum [Zilog Z80A - 3.5 MHz, 48kB, dvojni kasetofon,
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]

BivšiUser2 ::

Glede varnosti je IMO boljše z servisi, je pa sitno potem consumati, serializirati in deserializirati json. Priznam pa, da sem se razvadil z klasičnimi WinForm-si.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Malo se poglabljam v UWP in kaj si ti ja nor kaj je to lame stvar za začetnika, nekaj essential stvari kot npr. za delo s FileTransferom ni. Zanimivo, napisal sem, da so notri dali Sqlclient. Program pa se zruši, ker Sqlclient client ne najde System.Threading.Thread, ki ga UWP ne podpira.
SloTech - če nisi z nami, si persona non grata.

Zgodovina sprememb…

Lonsarg ::

Ta UWP je reset .net APIjev. V kratkem pride podpora .NET Standard 2.0 v UWP aplikacije, ki bo podpiral že večino .net APIjev. Za marsikoga bo ta izdaja mejnik, ko se bo lahko začelo "prave" aplikacije pisat z tem refreshanim .NETom.

Tudi trenutni UWP sicer že podpira večino funkcij za delo z datotekami, vse pa res še ne.

BivšiUser2 ::

Je kakšen schadule, če pride še maja bi znal še biti zanimiv...
edit: za pred 14 dnevi piše nekaj 88% na GitHub-u.
SloTech - če nisi z nami, si persona non grata.

Zgodovina sprememb…

BivšiUser2 ::

Kako napisati kodo brez štetja procesorskih jeder? Primer bi bil 5 procesov.
Proc1, ki je dualcore naj mi izvede 2procesa+2procesa+1 proces
Proc2, ki je quad core pa izvede 4 procese + 1 proces
(To da ne morem uporabiti vsa jedra recimo zanemarimo)
Sicer znam kako narediti za 2 jedri fiksno (sicer zaenkrat ne bom še rabil ampak me vseeno zanima).
SloTech - če nisi z nami, si persona non grata.

krneki0001 ::

Število jeder ali število logičnih procesorjev?

Za prebrati število logičnih procesorjev je zelo simpl ukaz:
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
    Console.WriteLine("Number Of Logical Processors: {0}", item ["NumberOfLogicalProcessors"]);
}


Če hočeš pa hitrejše nabiranje koliko ima logičnih jeder, pa namesto "select *", uporabi "select NumberOfLogicalProcessors", ker boš samo eno vrstico nazaj dobil kot rezultat.

Zgodovina sprememb…

BivšiUser2 ::

Zaenkrat me zanima samo porazdeljevanje med fizičnimi jedri.
SloTech - če nisi z nami, si persona non grata.

krneki0001 ::

Ti imaš:

1.)Fizični procesor
2.)jedra na fizični procesor
3.)logične procesorje

Jedra:
int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    coreCount += int.Parse(item["NumberOfCores"].ToString());
}
Console.WriteLine("Number Of Cores: {0}", coreCount);



Programi se izvajajo na logičnih procesorjih. Ne?

krneki0001 ::

Če znaš nemško imaš tukaj ogromno teh zadev:
http://www.codeplanet.eu/tutorials/csha...

BivšiUser2 ::

https://stackoverflow.com/questions/446... ?
Mah ta UWP mi počasi najeda živce. Za vsak kompleksnejši problem je sicer rešitev vendar je potrebno ogromno telovadbe. Trenutno me samo zanima kako shendlati XPath, upload na FTP, fetchati podatke s PB ter skenirati QR kode, sem po gulglal nekaj vendar je napram Androidu, to kot, da bi bil v kameni dobi. Kakšen nasvet, s katerim lahko dokončam te stvar?
SloTech - če nisi z nami, si persona non grata.

Zgodovina sprememb…

cekr ::

UWP Community Toolkit
Sinclair ZX Spectrum [Zilog Z80A - 3.5 MHz, 48kB, dvojni kasetofon,
TV-OUT, radirke, Sinclair-Basic], Sinclair ZX-81 [Z80A, 3.25MHZ, 1kB]

BivšiUser2 ::

Kako je kaj s podporo MariaDB za UWP? Trenutno imam Debian 8 VPS na katerem laufajo apache2 (za phpmyadmin, v kratkem omogočim tudi SSL) ter MySQL 5.7. Nevem zakaj ampak me je nekaj pičilo, da nadgradim na Debian 9, kjer je po defaultu nameščena baza MariaDB, vendar mi paše da iz appa dostopam direktno do baze s pomočjo MySql konektorja 6.7.9.
SloTech - če nisi z nami, si persona non grata.

Lonsarg ::

MariaDB je zaenkrat še vedno kompatibilna z MySQL. MySQL provider za .Net Framework Core (ki je podprt znotraj UWP) pa že obstaja in to celo ceč kot eden. Tu je primer uporabe enega:
https://damienbod.com/2016/08/26/asp-ne...

BivšiUser2 ::

Kul, potem pa kar na Debian 9.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

https://docs.microsoft.com/en-us/window... Stari način connectanja na SQL server, zdaj na UWP. Če ima kdo viška časa lahko prosim pogleda, kako je s FTPjem in podobnimi zadevami?
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Kako urediti štalo z encodingom datotek ter samih servisov? Imam namreč eno php datoteko, ki mi po urejanju v Atomu deluje kot mora, ko pa shranim datoteko php v visual studiu (2017) query deluje le delno, čeprav query v phpmyadmin-u dela 100%, kako torej zadevo pravilno shranjevat? Kako pa pravilno nastavit zadeve v uwp aplikaciji, php.ini datoteki, apache configu ter mysql serverju (podatkovna baza - tabele v njej), da potem ne bo štale, ko bodo šumniki npr. "š", ne pa \u161? Ravno to se mi dogaja, ko sem znotraj mysqla (phpmyadmin), ko pa s php podatke dobim ven pa mi kaže tisti "\u611" (za ilustracijo), čeprav je charset enak (UTF-8 (php) in utf8mb4 (mysql), za apache pa c# pa ne vem nastaviti, tudi na stackoverflow ne nejdem nič pametnega ).
SloTech - če nisi z nami, si persona non grata.

al_z ::

Pred zapisovanjem PHP datoteke na disk v C# moraš nastaviti encoding v UTF-8 (privzeto kodiranje v Windows je ponavadi UTF-16 (Unicode)).

Stackoverflow

BivšiUser2 ::

Ok, to je za fajle, kaj pa naj naredim glede samih spremenljivk. Se pravi
Text, ki ga obdelujem :
Mysql tabele baze - utf8mb4_general_ci, nekje celo utf8_general_ci (kaj je sploh varchar prednost glede na char (8 biten)
PHP.ini datoteka: UTF-8 Apache: UTF-8
C# string: UTF-16?
Kako spraviti vse skupaj na skupni imenovalec oz. kateri imenovalec je najboljši? Določene prenose gor/dol na debian server mislim kriptirati in sem prebral, da če to ni poglihano pa nastane veselica.
Torej:
 C# <-> PHP API <-> MariaDB & Apache
.
SloTech - če nisi z nami, si persona non grata.

al_z ::

Encoding UTF-8 moraš imeti nastavljen pri zapisu datotek v razredih (...)Stream ali (...)Writer in pri branju iz datotek v razredu (...)Reader. V vseh primerih nastavljaš lastnost Encoding.

V kakšnem kodiranju pa so spremenljivke v C# programu, pa ni važno (v RAM-u so verjetno v binarni obliki).

al_z ::

Google: mysql varchar vs char
Prvi zadetek

Char ima fiksno dolžino zapisa v zlogih, varchar pa se prilagaja dejanski dolžini stringa. Baza hitreje dela s char, vendar porabi več prostora na disku.

BivšiUser2 ::


V kakšnem kodiranju pa so spremenljivke v C# programu, pa ni važno (v RAM-u so verjetno v binarni obliki).
Je važno. Na Stackoverflow sem bral, da je tip šifriral JSON v php-ju (AES, IV in key sta enaka na REST servisu ter C# aplikaciji), potem pa dešifrira v aplikaciji in mu je vrglo čist drugačen string (v glavnem ni bil enak string). Na Githubu sem našel sicer neko kodo, si pa nisem šur, če deluje.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

Edit: OZ. res ni važno, če je vse ista platforma:
 MSSQL + IIS <-> C# App
, pa da so verzije v letih približno skupaj
Server 2012 <-> C# 7.0
, ipd.
SloTech - če nisi z nami, si persona non grata.

BivšiUser2 ::

SloTech - če nisi z nami, si persona non grata.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python primer async/await

Oddelek: Programiranje
181931 (1037) jype
»

C# .net class vs .net core async await issue

Oddelek: Programiranje
121500 (1260) detroit
»

C# osveževanje app

Oddelek: Programiranje
12885 (655) mihies
»

[Android] setText iz AsyncTask

Oddelek: Programiranje
7784 (701) golobich
»

Android threadi in asynctaski

Oddelek: Programiranje
231458 (1104) Kocka

Več podobnih tem