- Fujifilm X
- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- AMD Navi Radeon™ RX 9xxx sorozat
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Soundbar, soundplate, hangprojektor
- Széles körben elérhető a Seagate HAMR merevlemezcsaládja
- OLED TV topic
- Milyen házat vegyek?
- Mégsem búcsúznak a DDR4-es memóriák
- ThinkPad (NEM IdeaPad)
Új hozzászólás Aktív témák
-
joysefke
veterán
-
fatal`
titán
válasz
CPT.Pirk #9897 üzenetére
Ott valami más gond lesz.
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var stack = new Stack<string>();
stack.Push("1");
stack.Push("2");
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
}
}Kimenet
2
1
Ha InvalidOperationt dob, akkor a második Popnál már üres a stack. Vagyis vagy bele sem került, vagy valamikor ki lett már véve az elem, amit nem figyeltél.A VS amúgy csak egy fejlesztőkörnyezet, olyan mintha Java-nál azt kérdeznéd, hogy IDEA alatt miért dob valami exceptiont.
-
CPT.Pirk
Jómunkásember
Sziasztok!
Miért okoz VS2022 alatt stringeket tartalmazó stack utolsó elemének pop() vagy clear() hívása InvalidOperationException: Stack empty exceptiont?
Van egy stack, stringek számára. Két elem van a stack-ben, abból egyet még kiszed a pop(). A másodiknál jön az exception. Egy volt kollégámtól örököltem ezt a kódot de hiba van benne, én meg nem ismerem a VS-t különösebben.
Viszont szerintem nem csinálta rosszul, a stack-es példák se írnak róla, hogy 1 elemnél nem lenne szabad pop()-ot hívni. [link]Még ilyeneket hoz a google a stack empty-re, de nem tudom mit kezdjek ezzel az infóval: [link]
-
Alcsi69
senior tag
válasz
Alcsi69 #9883 üzenetére
Tegnap hívott a HR-es srác SAP-tól, azt mondta nem akar spoilerezni, de elég előrehaladott már a felvételi folyamatom és jelentkezzek a konkrét pozícióra, mivel amire alapból jelentkeztem az csak egy ilyen gyűjtőpozi.
Fogalmam sincs hogy melyik pozíció érné meg jobban hosszútávon, de véleményem szerint az SAP CV-n jobban nézne ki.
-
Keem1
veterán
válasz
sztanozs #9893 üzenetére
Nem-nem, csak ide loggoltam most, a kerékpározó hód javaslatára, hogy meddig jut el a kódban.
Így derült ki, hogy a service ojjektum létrehozásánál hasal el, tovább nem megy. De hogy miért, azt eddig nem sikerült kideríteni.Nlogot használok amúgy, de ez csak egy teszt cucc, mert egyedül a service-t nem sikerült átemelni 4.5-ből 5.0-ba, és a kicsontozott példa service se megy, szóval ugyanez a baja az éles motyónak is.
-
Keem1
veterán
válasz
sztanozs #9890 üzenetére
public class Service : ServiceBase
{
public Service()
{
File.AppendAllLines(Logfile, new string[] { "Service init" });
ServiceName = Program.ServiceName;
}
protected override void OnStart(string[] args)
{
File.AppendAllLines(Logfile, new string[] { "Service start" });
base.OnStart(args);
}
protected override void OnStop()
{
File.AppendAllLines(Logfile, new string[] { "Service stop" });
base.OnStop();
}
} -
Keem1
veterán
Megnöveltem 500 secre, de továbbra is tök ugyanaz...
Szokás szerint eljut a "Running as service" pontig, aztán annyi... Tovább nem megy.PS C:\Windows\System32> sc start TestSrv
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
PS C:\Windows\System32> -
Keem1
veterán
Igazad van, így viszont van némi infó...
if (!Environment.UserInteractive)
{
File.AppendAllLines(Logfile, new string[] { "Running as service" });
// running as service
using (var service = new Service())
{
// Ez a log entry már nem kerül be a logba
File.AppendAllLines(Logfile, new string[] { "Servicebase run" });
ServiceBase.Run(service);
}
}Itt a Running as service még benne van a logban, a Servicebase run már nincs. Tehát a service disposable már nem jön létre, ezek szerint.
-
dqdb
nagyúr
-
Alcsi69
senior tag
Igen, nekem is ilyen volt az "élményem".
Nekem egy már kész programot kellett javítanom Wordben.SAP-nál ez egy olyan program, ami két darab 6 hónapos ciklusból áll, és Sofware Development, DevOps és Support teamek közül lehet választani. Értelemszerűen én a Developmentet és a DevOps-ot választanám.
Van mentor mindegyik lehetőségnél, igen. A tanulás és a képzés a lényege, a program végén meg 99.99%-os eséllyel az egyik, vagy hasonló teamből kap az illető ajánlatot a munkára.A HR-es előszűrésen én a C#-ot mondtam, hogy kifejezetten azzal foglalkozok most, de bármiféle nyelv IS jöhet.
Mondjuk én villamosmérnökin vagyok és van egy elég jó ilyen irányú ajánlatom is, szóval hogyha esetleg felvesznek az SAP-hez, akkor nem tudom melyik mellett döntenék.
-
dqdb
nagyúr
Ez elvileg kellene, hogy működjön. Gyakorlatilag láttam már olyat, hogy a .NET szolgáltatást a rendszer olyan lassan indítaná el, hogy az SCM kilövi azt még azelőtt, hogy egyáltalán elindulna (nem tudom az okát).
A Program.Main, Service.OnStart és Service.OnStop metódusokba tegyél fájlba naplózást, hogy látszódjon, egyáltalán eljut-e oda a vezérlés. Ha nem, akkor itt a workaroundnál látható módon a gyári 30000 ms-t tornázd fel magasabbra (nekünk volt, ahol elég volt 2 perc, volt, ahol 3 kellett).
És ahogyan a többiek is javasolták, használj LTS verziót, ami a 6.x.
-
Alexios
veterán
Olyan nagy breaking changek nincsenek 5 és 6 között már, valószínűleg simán tudod upgradelni bármi gond nélkül. De amúgy igen, az utóbbi időben felgyorsult a .NET fejlesztése, jelenleg a 6 az LTS azaz hosszabb távon támogatott verzió, és két évente jön egy új LTS, közben pedig egy rövidebb ideig támogatott verzió (jelenleg a 7 az aktuális)
-
joysefke
veterán
Robot porszívó programozás?
Ez lenne az?
Google Coding Interview Question | Leetcode 489 | Robot Room Cleaner - YouTube -
t256
őstag
válasz
Alcsi69 #9875 üzenetére
Evosoftnál voltam én is. Nekem az jött le, hogy a HR-es hölgyet érdekli csak, illetve próbálta menteni a helyzetet. Közömbös volt mindenki.
Neked mi volt a feladat? Robot porszívó programozás?
SAP milyen lenne? Mentor "fogja a kezed" és megtanít mindent? Milyen programnyelv kell hozzájuk? C#? -
Alcsi69
senior tag
válasz
Alcsi69 #9872 üzenetére
Tegnap csináltam SAP Next Talent Program interjút, ez sokkal jobb volt mint az evosoftos.
Jobban is ment, illetve jobbfejek is voltak sokkal. Az evosoftosnál nem igazán segítettek kérdéseknél, és nem is tűnt nagyon úgy hogy érdekelte volna őket bármi amit válaszolok, mert senki sem figyelt a válaszaimnál, csak telefont nézegettek meg ilyenek. -
martonx
veterán
A .Net 5 már teljesen elavult. Ráadásul biztosan windows service kell neked?
Itt a hivatalos leírás windows service készítéshez .Net 6+ esetben: Create a Windows Service using BackgroundService - .NET | Microsoft Learn
-
Keem1
veterán
Srácok, ez nektek meg .NET 5 alatt?
[link]Simán lefordul, tudom serviceként installálni, de indítani már nem tudom.
Nálam ezt produkálja:
The Service did not Respond to the Start or Control Request in a Timely FashionKöszi, ha valak megnézné.
-
Alcsi69
senior tag
Sziasztok!
Entry Level / Junior pozis interjúnál véleményetek szerint a "szakmai interjú, mely során a szakmai kollégák felmérik a tudásodat, bemutatják neked a projektet és te is felteheted a szakmai jellegű kérdéseidet" résznél milyen kérdésekre lehet számítani?
Én olyasmikre számítok hogy abstract class, interface, SOLID, access modifier-ek, az exception handling alapjai.
-
martonx
veterán
válasz
Alcsi69 #9866 üzenetére
Nem csak backend fejlesztésre használják. Winforms, WPF fejlesztés a mai napig is megy. De éldegél még a Xamarin is cross-platform fejlesztéshez.
Ennek utódja a reményteljes MAUI, amitől szintén nagyon félek, mert ez is új MS technológia és ez is a hányadék, régen semennyire se dokumentált, most nem tudom milyen állapotban lévő XAML leíró nyelvre alapul. Ha nem XAML lenne, már rég belevágtam volna a MAUI-ba. XAML helyett lehet MAUI-t hibrid Blazor appként is írni, ami meg számomra pláne a "húbazdmegezcsodahaműködik" kategória.
És jól látod, ott van még a Blazor, mint böngészős frontend technológia, amiről feljebb leírtam a véleményem.
Nyilván a böngészőben futó egyetlen nyelv a javascript. Webassemblyvel lehet az összes többi nyelvet futtathatóvá trükközni a böngészőkben, de ahogy írtam is ezek csak szerencsétlen trükközések, mert a DOM-hoz nem férnek hozzá, ergo nem tudják a régi jó JS-t megkerülni. -
Alcsi69
senior tag
válasz
joysefke #9867 üzenetére
Igazabol nekem sincsenek annyira nagy frontendes ambicioim, valahogy az ehhez a temahoz tartozo problemak nem tunnek szamomra annyira erdekesnek (pl. egy embedded rendszer problemaihoz kepest).
Viszont eleg sok allashirdetest lattam mar, ahol vagy elvaras, vagy elony volt a valamilyen szintu frontend tudas, annak ellenere hogy kifejezetten a NEM frontendes pozikat neztem.
Nem igazan tervezek sokaig maradni Magyarorszagon az egyetem utan, ezert a legtobbszor kulfoldi allashirdeteseket neztem linkedin-en, rengeteg C#-os van.
Felfedeztem a 'C# Yellow Book'-ot, ez mennyire szamit jonak a C# sajatossagainak az elsajatitasahoz?
-
joysefke
veterán
válasz
Alcsi69 #9864 üzenetére
Én "hobbiból" végigcsináltam ezt a Blazor intro könyvet : Blazor in Action (manning.com) . (hobbiból mivel front end ambícióim nincsenek).
A példaprogram kifejezetten jó a könyv jól követhető, jól van felépítve. Kliens oldali (Web Assembly) konfigurációt használ a végigvezetett példa, de szerver oldali Blazorral is ugyanígy működne.
Én ha saját szórakoztatásomra Blazor projektet csinálnék elsőnek szerver oldali Blazorral indulnék el, tehát nem WebAssembly-vel. Nehézkesebb volt a debuggolás mint tradícionális .NET runtimeon futó projektek esetén.
Blazor Serverrel fog működni a debuggolás és úgy általában a tooling. Szerintem ez utóbbi magas prioritás kell legyen. ASP.NET Core Blazor hosting models | Microsoft LearnErdemes lehet a C#-ot megtanulgatni.
Érdemes. Ha a legkissebb ellenállás irányában akarsz menni, akkor valami bejáratott, nagy népszerűségnek örvendő framework körül építkeznél. Mondjuk ASP Net Core: rengeteg jó anyag, tooling és még álláshírdetésben is fogsz vele találkozni.
Persze nyilván a feladat határozza meg az eszközt és nem fordítva. -
Alcsi69
senior tag
válasz
martonx #9865 üzenetére
Igen, nekem is szimpatikusabb a C# mint a JS (legalabbis volt, mostanaban mar kezdek ezzel is megbaratkozni, csak hozza kell szokni hogy, hat nem is tudom hogyan fogalmazzam meg, nagyon strukturalatlan ossze-visszasagnak tunik), foleg mivel eddig csak C/C++ nyelvekkel foglalkoztam.
Igazabol nem is fog kelleni sok funkcionalitas majd ehhez a webapphoz.
C# jelenleg leginkabb backend fejlesztesre alkalmazzak ugye? Persze Unity-s dolgokon kivul.
-
martonx
veterán
válasz
Alcsi69 #9864 üzenetére
A Blazor jelenleg semennyire se népszerű. Egyrészt MS elég béna az új technológiákban, ezért jó érzésű ember fázik ráugrani az MS újdonságaira. Másrészt az egész WebAssembly technológia félkarú óriás a DOM manipuláció nélkül, azaz mindenképpen JS kell hozzá, és még lassú is, csomó kezdeti adatot letölt stb. Ezt persze a framework ügyesen próbálja leplezni, de ettől még a tények makacs dolgok.
Ettől függetlenül miért ne használhatnád, játszhatnál vele, ha érdekel? Nagyságrendekkel jobb nyelv a C#, mint a Js.
-
Alcsi69
senior tag
Sziasztok!
Nem hasznaltam nagyon C#-ot meg, csak gimiben, viszont gondolkodok rajta hogy lehet elkezdem atnezegetni.
Villamosmernokire jarok, es kovetkezo felevben fogom csinalni a szakdolgozatot, amihez szeretnek krealni egy webappot is, hogy a berendezest onnan is lehessen vezerelni.
Szeretnek egy kicsit 'niche-ebb' technologiakat hasznalni, ezert gondolkodok rajta, hogy egy ugymond commonabb framework/library helyett, pl. React, hasznalhatnam a Blazort.
Viszont nem tudom mennyire eri meg vagy nem eri meg egy teljesen uj nyelvet megtanulnom a szakdolgozathoz, hiszen JS-t valamennyire ismerem es hasznaltam is mar. JS-hez is vannak ugye nem annyira 'nepszeru' frameworkok, pl. Svelte vagy Solid.
Nektek mi a velemenyetek? Erdemes lehet a C#-ot megtanulgatni? Mennyire nepszeru a Blazor olyan munkakornyezetekben, ahol eleve C#-ot, .NET-et meg ugy a teljes ehhez tartozo ecosystemet hasznaljak?
Koszi!
-
válasz
martonx #9861 üzenetére
Eléggé háttérbe van szorítva most ez a projekt a cégnél, de amennyit eddig foglalkoztam a MAUI-val nekem nem tűnt rossznak. Jó, ha nem szereted a xaml-t az egy dolog, nekem se volt trivi első körben sok minden, de amúgy a Xamarin.Android-nál szerintem sokkal kényelmesebben használható. (Xamarin Forms-ot nem próbáltam)
-
martonx
veterán
Én inkább félve kérdezem meg, próbálta már valaki komolyabban a MAUI-t (úgy értem sample todo appokon túljutva, komplexebb appokban, neadj isten productionben)? Minden új MS technológiától ráz a hideg, mert ki tudja mikor lövik le / veszítik el az érdeklődésüket.
Xamarinnal szopattam magam egy darabig, XAML-t rühellem, szóval erős fenntartásaim vannak a MAUI-al. -
Félve kérdezem (mert sejtem a választ
), próbálta már valaki a SimpleInjectort MAUI projektben? Az istenért nem sikerül működésre bírnom, valami apróságot tuti benézek
-
leslie23
tag
MVVM kapcsán lenne egy általános kérdésem, amire eddig nem találtam igazán jó választ.
Hogyan érdemes a Model változását jelezni a ViewModel felé? Van egy ObservableCollection ami ViewModeleket tartalmaz, ez van egy DataGridre kötve. A ViewModel lényegében wrapper a Model körül, viszont van olyan dátumom amit a ViewModel formázott stringként ad vissza a Modelből. Ha egyszerre mondjuk 10 db elem (ViewModel) dátum értékét akarom módosítani, akkor három lehetőség jutott eszembe, de egyiket sem érzem túl jónak.
Most formázott stringként adom be a ViewModelnek a beállítani kívánt értéket, a setben alakítom DateTime-má, ami bekerül a mögöttes Modelbe és a setter hívja a PropertyChanged-et is. Ez a kétszeri parse miatt nem tűnik optimálisnak.
A másik opció, hogy a Modelem implementálja az INotifyPropertyChanged-et, ezt szívem szerint kerülném, nem érzem túl jó elgondolásnak, én úgy értelmezem, hogy ez kizárólag a ViewModel feladata lenne.
A harmadik, hogy a ViewModel is DateTime-ot tartalmaz és egy ValueConverter alakítja a UI-hoz az értéket a megfelelő formátumra. Érzésre talán ez a legelegánsabb, csak ha van 10 ilyen esetem (dátumformátumok, stringek, stb.) akkor kell egy rakás ValueConverter.
Mi lehetne ilyenkor best practice? -
Alexios
veterán
válasz
martonx #9855 üzenetére
Nincs túl nagy react native tapasztalatom, viszont Microsoft xaml frameworkökkel van elég sok ahhoz hogy ne akarjak új projektet kezdeni rajta, főleg mikor vannak más alternatívák amiket nem fognak holnap kukázni a következő 70%ban hasonló dologért, inkább csak ezért a kérdésem
vagy ha legalább a Microsoft átírná valami saját alkalmazását maui-ra hogy kicsit komolyabban vehető legyen hogy ezt már tuti komolyan veszik
-
martonx
veterán
válasz
Alexios #9853 üzenetére
Na, éppen a react native az egy ótvar szar. Én ugyan. Net-ezek, de az új MS technológiákhoz, amikből folyton jön egy új megváltó, majd jól pofára eső, végül eltünő, nagyon óvatosan közelítek. Ami xaml-ön alapul, azt különösen ferde szemmel nézem.
Mivel react native egy fos, ha már mobil cross-platform a cél, akkor szvsz flutter.
De. Net 7 után lehet tennék egy próbát a MAUI-al is,addigra hátha kinő pár gyerek betegséget.
tboy93 kíváncsian várom majd a MAUI-os tapasztalatodat, véleményedet.. Net 6-al jelen állapotában, biztos hogy bottal se piszkálnám. -
válasz
Alexios #9853 üzenetére
Van egy Xamarin Android alkalmazás a cégnél, aminek ez valamelyest utódja, kiegészítése. Részben szerintem bizonyos kódrészletek átemelhetősége volt szem elött, meg a könnyebb betanulás (szerintem hasonlóbb lehet így ránézésre a MAUI a Xamarin Androidhoz mint a Reacthoz, utóbbival nem volt még dolgom). Elég .NET heavy a cég
Egyszóval nem én döntöttem így, én ezt a feladatot kaptam, abszolválnom kell.
-
Sziasztok, kaptam egy új projektet a cégnél, MAUI-ban kéne felhúznom, elsődleges platform az Android. Hivatalos doksin túl, honnét érdemes összeszedni belőle az alapokat? Az Udemy-s kurzus jó valamire?
-
cigam
titán
Van egy hosszú lista, és abból ki kell keresni 5 véletlenszerű elemet, de feltétel, hogy mindegyik másik elem legyen, nem egyen ismétlődés.
Létezik erre algoritmus? Több is? Pontosan milyen kulcsszavakra keressek rá, hogy rátaláljak az internetem? -
M_AND_Ms
veterán
Sziasztok
SSIS alatt van egy C# scriptem, ami SOAP envelope-ot szerializál a System.Xml segítségével. A wsdl adott, amiből az SSIS elkészítette a teljes osztály-reprezentációt
A gond az, hogy van egy xml tag, aminek a neve: value, és amit sohasem szerializál, hiába adok neki értéket..Ha egyszerűen az osztály reprezentácóban átnevezem valami másra, akkor rögtön megy rendesen. Érdekes, hogy Java alól ez nem gond. (meg általában semminek se okoz problémát ez a tag
Utánaolvastam, van-e valami megkötés a tag-ek elnevezésésre, de nincs: XML-ben csak az xml szó foglalt.
Van ezzel tapasztalata valakinek, miért marad a value nevű tag ki a generált envelop-ból? Vagy esetleg kipróbálná valaki, hogy nála.megy? -
Keem1
veterán
Srácok, Google API-ban valaki otthon van?
A Keep apihoz szeretnék segítséget.Futtatáskor böngészőből bejön a consent screen, leokézom, majd a következő exception fogad:
Google API Sample
====================
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/keep.readonly
Unhandled exception. The service keep has thrown an exception.
HttpStatusCode is Forbidden.
Google.Apis.Requests.RequestError
Request had insufficient authentication scopes. [403]
Errors [
Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global]
]
Google.GoogleApiException: The service keep has thrown an exception. HttpStatusCode is Forbidden. Request had insufficient authentication scopes.
at Google.Apis.Requests.ClientServiceRequest`1.ParseResponse(HttpResponseMessage response)
at Google.Apis.Requests.ClientServiceRequest`1.Execute()
at Testing.Program.Main(String[] args) in C:\Users\blahh\Visual Studio\ConsoleTest\Testing\Program.cs:line 46Ha minden igaz, akkor insufficient scope az oka. Ami azért érthetetlen, mivel elvileg két scope kell neki e szerint, de mégse elég.
Valakinek van esetleg ötlete?
-
ReSeTer
senior tag
Helló!
Van egy loop, amely minden egyes ciklusban megváltoztatja az egyik változó értékét.
Én ezeket az értékeket szeretném kilistázva megjeleníteni UI-n keresztül. Lenne mondjuk 5 érték egymás alatt listában. Az user kitudna jelölni többet egyszerre belőlük, vagy bepipálni, teljesen mindegy, az a lényeg, hogy utána én hozzátudjam rendelni a kijelölt értékeket egy másik változóhoz ugyanúgy egy loop-on keresztül.
Van erre valami beépített ingyenes class? A listázásra gondolok itt UI-n. Annyira nem vagyok otthon az UI-ban.
-
DrojDtroll
veterán
Sziasztok!
Visual Studio-hoz ismertek olyan kiegészítőt vagy beállítást amellyel automatikusan bezárhatók az inaktív preproc. direktívák? Egy másik dolog az a összes komment eltüntetése lenne amire megoldást keresek. Össze szeretném csukni az egysoros kommenteket is. Első pár szó ha látszódna az már bőven elég lenne. Törölni nem akarom a kommenteket.
Köszi -
Livius
őstag
Sziasztok!
Itt a fórumban nem rég azt az infót kaptam, hogy .NET core 5.0-nál a régi .NET Framework DLL-ek lehetséges, hogy használhatók, ha az assemblyben olyan dolgok vannak csak használva, amik a .NET core 5.0-ban implementálva lettek már, és ezt az analyzer akár meg is tudja mondani előre.
Most arra lennék kíváncsi és kérdezném, hogy a lassan 1 éve megjelent .NET 6.0 LTS-ben ezzel a kompatibilitással mi a helyzet? Az is tudja ilyen szinten használni a régi .NET Framework DLL-eket?
-
joysefke
veterán
Éles C# projektben próbálkozott már valaki funkcionális megvalósítással?
Ezt a könyvet olvasom: Functional Programming in C#, Second Edition (manning.com)
és eddig kb mindenre van válasza. (Adatbázisnál érzem azt, hogy bizonyos helyzetekben egy append-only DB csak bonyolítana a dolgon, esetleg nehezítené DB oldalról az adatkonzisztencia kikényszerítését, bár nyilván erre is van megoldás).Gyakorlatban is működik a funkcionális paradigma? Nagy visszhangja c#-ban eddig valahogyan nincsen.
-
bandi0000
nagyúr
válasz
martonx #9837 üzenetére
Igen, kb 30-70 arányban teszi ki az időm a .net, persze ettől tudhatnám, mármint csak a verziót nem tudom, magát a fogalmakat nem keverem azért
Amúgy igen, tegnap kipróbáltam, átraktam a tároltat abba az adatbázisba, ahol dolgozik, és úgy vissza is vonta. Nem én csinálom azt a részét, csak használom, de mint mondtam, nem marad így, .net be nem nyitok tranzakciót , nincs értelme, csak kívàncsi voltam, hogy kellene működnie
-
bandi0000
nagyúr
-
bandi0000
nagyúr
.net framework 6 alatt, ha indítok egy tranzakciót, benne hívok egy tárolt eljárást, amiben van tranzakció kezelés, és ugye ez a tàrolt egy adatbázisba van, viszont a tàrolton belül használ egy másik adatbázist, akkor hiba esetén értem ezt úgy, hogy lefutott a tàrolt és utàna keletkezik a hiba, minden visszavonódik?
Véletlen folytàn alakult így, azóta màr kiszedtem az EF ből a tranzakciót, mert hülyeség, viszont érdekel, hogy az én esetemben azért nem vont vissza semmit, mert amin indítottam a tranzakciót DbContext példàny, az különbözik attól, amit a tàrolt eljàrás hasznàl?
-
ReSeTer
senior tag
Ok, köszönöm mindenkinek. Megnézem ezeket.
-
válasz
ReSeTer #9829 üzenetére
Ez a példa a form1-en lévő button1 katt-ra megnyitja a form2-t, majd az azon található button1 katt-ra módosítja a form1-en a button1 feliratát. Az elv benne van, saját igényednek megfelelően átírod.
Form1.cs
namespace WinFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 MyForm2 = new Form2(this);
MyForm2.ShowDialog();
}
}
}Form2.cs
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp3
{
public partial class Form2 : Form
{
private Form1 MyForm1;
public Form2(Form1 MyForm1)
{
InitializeComponent();
this.MyForm1 = MyForm1;
}
private void button1_Click(object sender, EventArgs e)
{
MyForm1.Controls["button1"].Text = "PH! Fórum - C# programozás";
}
}
} -
quailstorm
félisten
válasz
ReSeTer #9829 üzenetére
"Teljesen mindegy mi a method, az a lényeg, hogy nem UI-n belül lévő method-on belül akarom megváltoztatni az UI-n lévő feliratot."
Ilyet nem tudsz csinálni, amennyiben a számolás másik szálon történik. Ha csak egy változót akarsz pörgetni, arra tökéletes az IProgress. Egyébként pedig én callback eventet használnék és dispatcherrel vissza UI threadre (hogy a workerben ne legyen direkt UI kód).
Ha nincs több szál a dologban, akkor elég a sima event invoke és a callbackben meg UI elem setelés. De ha hosszabb számolás, és a UI-t nem szeretnéd fagyasztani, akkor jobban jársz a külön threaddel.
Eventek.
DispatcherFire/SOUL/CD mutatja a statikus elérését a UI elemnek, azt is lehet, viszont az nem szép és nem moduláris megoldás. Bedrótozod az egyik komponensbe a másik komponens struktúráját.
-
ReSeTer
senior tag
válasz
joysefke #9828 üzenetére
1.
Igen, azt akarom, hogy egy másik classban lévő method változtassa meg a már megnyílt UI-ban lévő label-t. Ennyi. Nem tudom, hogyan férjek hozzá.
2. Na most ez már nekem magas, ilyen szinten még nem tartok, de szerintem egy kicsit túlbonyolítottad, vagy félreérthetően írtam le.
A logika ez:
Elindul a program, feljön egy főképernyő rajta 1 db. felirattal ("számolás még nem indult el") meg egy gombbal.
Megnyomja az user a gombot, elindul a "szamolas" method egy másik classbanpublic static void szamolas()
{
int a = 1;
int b = 8;
int valasz = a+b;
Főképernyő.felirat.text="számolás befejeződött"; // ez nem működik.
}Ez most csak egy gyors példa. Teljesen mindegy mi a method, az a lényeg, hogy nem UI-n belül lévő method-on belül akarom megváltoztatni az UI-n lévő feliratot.
Nem baj ha nem a háttérben csinálja, nem akarom én ezt túlbonyolítani, hogy több szálon fusson meg stb. Egyelőre. -
joysefke
veterán
válasz
ReSeTer #9827 üzenetére
Bontsuk kétfelé a kérdést. Vagy amit megértettem belőle:
1,
Akarsz valami UI-t csinálni, ami user inputra reagál, csinál valamit és visszajelzést ad.
Nem tudod hogyan kéne a UI-t létrehozni, strukrurálni, úgy hogy aztán később "egy másik metódustból" hozzáférj adott UI elemekhez?
UI-hoz nem szólok hozzá.2,
Van egy fő végrehajtási szálad és nem tudod hogyan kéne egy "jól definiált feladatot" nem a fő szálon végrehatjani hanem onnan a háttérbe delegálni úgy hogy a háttérben az megtörténjen, mellékhatásokat tudjon létrehozni, pld üzenetet tudjon küldeni vagy mondjuk meglegyen a visszatérési értéke?A "jól definiált feladatodat" ki kell szervezned. Legegyszerűbben egy metódusba amire aztán hivatkozni tudsz.
void Something(p1, p2, ..) { .. }
aztán ezt ahelyett hogy a fő szálon meghívnád ezt a Something(..)-et, delegálod a végrehajtását a threadpoolnak. Ezt a Task.Run(..) nal teszed meg és paraméterként átadsz egy delegate-et amelyik hivatkozik a metódusodra.
Tehát a fő szálon ahonnnan delegálsz :
p1 = ...;
p2 = ...;
var t = Task.Run(() => Something(p1, p2, ..))
// fő szál nincsen blokkolva, a 't' visszatérési érték referencia a Task objektumra amibe a delegált feladatod csomagolva lett.Ebben a példában a "Something" egy visszatérési érték nélküli metódus, tehát mellékhatásokkal operál.
Ha azt szeretnéd, hogy egy másik kódrészlet értesítést kapjon a "Something"-ben történtekről, pld hogy az éppen hol tart, akkor ezt a Something-nek átadott paramétereken kerszül tudod legegyszerűbben megtenni. Paraméterként átadsz egy delegate-et amit a "Something" fel tud hívni mintegy üzenve a külvilágnak.
pld átadsz neki egy Progress<T>-t paraméterként ezen keresztül pedig a Something vissza tud jelezni a Progress<T> gazdájának. (A Progress<T> egy Action<T> delegatet csomagol be, UI kompatibilis módon.)
Something(p1, p2, .., IProgress<int> progress)
{
progress.Report(0);Thread.Sleep(1000) // CPU work
progress.Report(50);Thread.Sleep(1000) // CPU work
progress.Report(100);
} -
ReSeTer
senior tag
Máshogy közelítem meg a problémát. Ez egy egyszerű program. Felejtsétek el a fenti kódot amit eddig írtam.
Elindul a program, egy főképernyővel rajta egy felirattal meg egy gombbal. A gomb megnyomása után elindul egy folyamat, a folyamatban valahol egy method szeretné megváltoztatni a főképernyőn lévő felirat szövegét. Ez nem megy nekem. Nem férek hozzá a label1-hez, csak ha a Form methodon belül csinálom.
Ez biztos valami alapvető szabály, amiről én nem tudok. -
vlevi
nagyúr
válasz
ReSeTer #9825 üzenetére
A ShowDialog feladata éppen az, hogy várjon a felhasználó reakciójára, és addig az alkalmazás más részét ne tudd elérni, amíg az a dialog ablak kinnt van. Más programnyelveken ezt ShowModal -nak hívják.
A Show() -ra kinn kellene maradnia, ott valami más dolog lehet, ami miatt bezáródik.
Mi lenne ennek a képernőnek a feladata? Mert, ha a nevéből ítélve csak egy progresbar szerű megjelenítés, ami kiírja, hogy hol jársz, arra nem kell külön formot létrehozni.
Sokféle megoldás létezik, arra, hogy kijelezd a futás állapotát a felhasználó számára. -
ReSeTer
senior tag
válasz
sztanozs #9824 üzenetére
Ami a ProgressUIForm_Shown-ban van, az lefut egyébként. A probléma az, hogy szeretném, ha egy specifikus helyen folytatná, ami már megvan írva. Tehát szeretném ha a fenti main-ben található progressValue="erre változtasd" paranccsal folytatná.
Ha csak sima Show-al oldom meg? Bár eleve azért használok ShowDialog-ot, mert Show-nál csak egy pillanatra nyílik meg az ablak, és már be is záródik. Ezt se tudom miért történik. -
ReSeTer
senior tag
Helló!
Szeretném megváltoztatni a kijelzett szöveget miután megjelent a form. Nem sikerül. Hogyan tudom rávenni, hogy a form betöltődése után folytassa a Main methodban megadott kódokat?
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ExcelMethods progressUIFormInstance = new ExcelMethods();
progressUIFormInstance.progressUI();
progressUIFormInstance.progressValue="erre változtasd";
}
}
Az Excelmethods classban:
public string progressValue = "asdasdsd";
public void progressUI()
{
Form progressUIForm = new Form();
progressUIForm.Width = 800;
progressUIForm.Height = 600;
Label progressUILabel = new Label();
progressUILabel.Text = progressValue;
progressUIForm.Controls.Add(progressUILabel);
progressUIForm.Shown += ProgressUIForm_Shown;
progressUIForm.ShowDialog();
}
private void ProgressUIForm_Shown(object sender, EventArgs e)
{
itt kéne valami, hogy folytassa a Main-ben a kódokat
} -
joysefke
veterán
Próbált már valaki C# projektet funkcionális paradigma szerint fejleszteni? Működőképes koncepció lehet ez jelenleg egy valós jól szeparált projekt esetében?
Amennyire utánaolvastam ez https://www.nuget.org/packages/LanguageExt.Core/ az egyik jelentősebb funkcioális osztálykönyvtár kiegészítés C#-hoz. És csak 5m letöltés. Ahhoz képest, hogy a nyelv egyre inkább a funkcionális irányba fejlődik az újabb verziókkal, nem tűnik jelentősnek az érdeklődés.
A témával foglalkozó könyven amit éppen olvasok a hibakezelés nagyon tetszik.
-
leslie23
tag
Nem desktop fejlesztői pozi lenne a cél, inkább az, hogy ha időnként desktopra kell összeraknom valamit, akkor tudjak szofisztikáltabb, akár reszponzív UI-t is szállítani, valamint SoC-szempontból az MVVM csábító, mert WinFormsban fejlesztettem már ugyan MVP szerint, de az annyira nem volt meggyőző. A befektetett idő bizonyos szinten mindenképp "kidobott" kategória lenne, mert ahogy írtam, a tanulásban a fő csapásirány a web nálam, a piac is mindenképp erre tendál, ugye.
Maga a XAML sem kritérium, de a C#-ot szívesen megtartanám, ezért Electron és társai nem annyira vonzanak.
Esetleg Blazor Desktopot próbálgatta már valaki?
edit: most látom, hogy van már Electron.NET is, ha ezzel van valakinek tapasztalat, jöhet az is. -
Alexios
veterán
válasz
leslie23 #9817 üzenetére
Ha a kérdés az, hogy van-e még piaci igény WPF fejlesztőre, a válasz igen. Az, hogy hosszútávon mennyire éri ebbe most jelentős energiát fektetni más kérdés, de nekem is jelentős WPF fejlesztés volt pl. az előző munkahelyemen.
WinUI3/MAUI-ra amúgy elég könnyen átvihető a tudás, de én nem biztos arra alapoznék, hogy ezek nagyon el fognak terjedni a jövőben, desktop alkalmazásnál jó vagy sem sokkal inkább az electron és hasonlók az irány, én inkább efelé mennék el ha most 0ról akarnék desktop fejlesztéssel foglalkozni. -
leslie23
tag
Szerintetek érdemes még WPF tanulásába időt és energiát tenni? Tudom, hogy a web sokkal kifizetődőbb és nekem is ez a fő csapásirány a tanulásban, viszont néha szükségem van desktop fejlesztésre és érdekel is a téma. Ilyenkor jobb híján a WinFormshoz nyúlok, de szívesen beletanulnék valamilyen XAML-alapú technológiába. Cross-platform egyelőre nem szempont, ráadásul ahogy olvasgatok a MAUI nem tűnik kiforrott cuccnak, WinUI 3 szintén. Illetve ezekhez oktató anyagokat is nehezebb találni, WPF-hez van Youtube-on néhány igényesnek tűnő kurzus, amikben fw nélkül, vanilla MVVM fejlesztést mutatnak be, érzésem szerint első körben ez lenne optimális.
Vajon WPF-es tudás mennyire könnyen forgatható át WinUI 3/MAUI-ra? -
-
Sziasztok.
Van két C# winformom akik szeretném ha üzzennének egymásnak egyszerű stringekkel: AApp BApp
Mind a kettőnél ez a kód:
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, ref COPYDATASTRUCT lParam);
private const int WM_COPYDATA = 0x4A;
[StructLayout(LayoutKind.Sequential)]
struct COPYDATASTRUCT
{
public int dwData;
public int cbData;
public int lpData;
}private void sendMessage(string message, string param)
{
string sepaChar = ";";
message = message + sepaChar + param;
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.lpData = (int)Marshal.StringToHGlobalAnsi(message);
cds.cbData = message.Length;
Process currentProcess = Process.GetCurrentProcess();
Process[] processCollection = Process.GetProcesses();
foreach (Process p in processCollection)
{
if (p.ProcessName == "AApp/BApp")
{
SendMessage(p.MainWindowHandle, (int)WM_COPYDATA, 0, ref cds);
AddDebugText("> OUT MSG: \t" + message);
}
}
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT CD = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT));
byte[] B = new byte[CD.cbData];
IntPtr lpData = new IntPtr(CD.lpData);
Marshal.Copy(lpData, B, 0, CD.cbData);
string strData = Encoding.Default.GetString(B);
MessageProcessor(strData);
break;
}
base.WndProc(ref m);
}
Szóval úgy tűnik működik. Hogyha a B program indul előbb akkor szépen megvan a kérdés/válasz. Viszont fordított esetben már B programhoz nem érkezik meg a válasz.Mit rontok el?
-
leslie23
tag
válasz
rgeorge #9806 üzenetére
Köszönöm, most rákeresve látom, hogy valóban szokás usingba tenni az SqlDataAdaptert, bár például az MSDN mintakódban nincs using és explicit Dispose() sem.
Vagy másra értetted a szabályos használatot?
Mindenesetre a fenti probléma usingba fogalalva az SqlDataAdaptert is előjön.
De egyébként nem nagy ügy, semmibe nem kerül a connection stringet kiegészíteni, csak furának találom a dolgot.
joysefke: Neked is köszi, utánaolvasok a safe thread collections témának, bennem őszintén szólva fel sem merült, hogy az alap generikus gyűjtemények ne lennének alkalmasak több szál esetén. -
bandi0000
nagyúr
válasz
Alexios #9809 üzenetére
Köszömö, kicsit elbeszéltünk, de a 2. linked szerintem jó lehet.
Ugye itt nálunk 1-1 service 1-1 kategóriáért felel, pl számlakészítés és ebbe ugye be vannak húzva a függőségek. Akkor van a baj, ha új funkció kell, ami ide tartozik, de adatbázis tábla szinten pl csak 1 ügyfélnek lesz megvalósítva. És mivel minden céghez ugyan ez megy ki, így amikor a régiek csinálnak egy számlát, akkor az InvoiceService be akarja húzni az új repót, ami nincs meg a régieknél, és ekkor hibát dob.
Ez a service feldarabolás is max addig jó, amíg úgy áll fel a történet, hogy van egy base, illetve minden cégnek lesz egy sajátja, de onnantól kezdve, ha átfedés van, pl 6-ból 2 végnek kell valami, akkor vagy csinálok még 1 service-t ami annak a 2-nek közös, vagy crlc + v és megvalósítás mindkét sajátjába
Ezért gondoltam a methos injection-ra, mert ebben az esetben még lehet egy base, meg sok különálló, de így akkor se lenne baj elvileg, ha csak 1 lenne, és a függőség feloldása mindig akkor történne, amikor konkrétan használni akarjuk
-
Alexios
veterán
válasz
bandi0000 #9808 üzenetére
Ha jól értem a problémád, akkor igazából az a gond hogy ha nem is singletonra van beregisztrálva a DI-ba a függőség, de ugyan azt a példányt adja vissza két külön requestre - ezt pl. lehet állítani asp.net core-ban biztosan, hogy milyen életű legyen a függőség, lásd: [link] Egy nagy mindenhez is értő szerviz feldarabolása mondjuk kifejezetten jó ötlet(single responsibility principle pl.), hogy minden csak azt hívjon ami kell is neki tényleg
Ettől függetlenül amúgy létezik természetesen method injection is, asp.net core-ban is akár, lásd: [link]
-
bandi0000
nagyúr
Addot egy WebService, amit elkezdtünk átírni/frissíteni, és adódott egy probléma
Eddigi felállás szerint mindig 1 Controller 1 Service volt nagy vonalakban, a Service-be be voltak DI-al dobálva a repository-k, na már most vannak olyan cégek, ahol kicsit eltérnek az adatbázisok, és ezáltal hiányoznak táblák, és ha 2 ilyen cég hív 1 közös Controllert, akkor a EF dobni fog egy hibát, mert amikor példányosítja a repót, akkor nem talál hozzá táblát
Ezt mivel lehetne megoldani? Mi első körben arra gondoltunk, hogy lesz egy BaseService illetve több specifikus service is, így a függőségeket eltudjuk szeparálni
A másik ami eszembe juttott, de nem tudom egyáltalán van-e megoldás erre c#-ban, hogy minden maradna a régiben, DI nem konstruktorban menne, hanem valahogy függvény szinten, de szerintem ilyen nincs is, pl Kotlinban csak akkor hozza létre a függőséget, amikor használva van, ergó el lehetne érni azt, hogy bizonyos függvények esetén próbálja csak létrehozni
-
joysefke
veterán
válasz
leslie23 #9798 üzenetére
Alternatív megoldásként felmerült, hogy a parallel végrehajtásnál csak egy DataSetben tárolnám a lekérdezések eredményeit, majd ezt követően egy külön műveletben sorosan generálnám le az Excel-riportokat.
Igen, érdemes kódban is elkülöníteni az egymástól nagyon különböző feladatok megvalósítását. Ezzel a hibák kezelését könnyíteni tudod.
Fogod a Parallel.Forech-edet és ahelyett hogy az abban levő kód (delegate) csinálja a az SQL lekérdezést ÉS az Excel interop hívását:
A Parallel.Foreach csinálja csak
-1. az SQL lekérdezést /ahogyan eddig/, az adatok esetleges modellekbe való transzformálását,
-2. majd az eredmények összefésülését. <= ennek thread safnek kell lennie.A 2.-höz használhatsz BlockingCollection<T>-t ami thread safe. A ForEach által futtatott kód az SQL lekérdezés eredményét kiszedi a readerből, opcionálisan áttranszformálja valami modellbe (ez a "T") majd ezt beszúrja a BlockingCollection<T>-be.
A Parallel.Foreach futása után egyetlen szálon végigiterálsz a A BlockingCollection-ön és feldolgozod a kinyert és összefésült adatokat => meghívod egyenként az Excel interopodat minden egyes adatelemre.
-
sztanozs
veterán
válasz
leslie23 #9804 üzenetére
Szerintem a gond ott lehet, hogy olyan adatforrásod van, ami nem tolerálja a parallel használatot.
Esetleg próbáld meg a SqlDataAdapter és DataTable instance-eket is Using-ba rakni. Mondjuk a példák, amiket láttam SqlCommand-dal voltak (ott is berakták a Commandokat using-ba, hogy rendesen terminálva legyenek).
-
leslie23
tag
válasz
sztanozs #9803 üzenetére
Köszönöm, martonx megerősített benne, hogy inkább tárolom az adatokat a memóriában, az Exceleket pedig a folyamat végén, szép sorban létrehozom. Ez gyorsan megvan, ha nem looppal, hanem tömbből egy lépésben rakom le a munkalapokra az adatokat.
Most itt csak SELECT-ekről van szó, INSERT-nél nekem is az SqlBulkCopy szokott beválni tömeges betöltésre egy tranzakcióval. Itt most parallel foreach a harmadára csökkenti a teljes futási időt.
Viszont arról nem találok semmit, hogy a connection timeouttal akkor mi is a helyzet. Kb. így néz ki a kódom, ha MaxDegreeOfParallelism = 1, akkor lefut, ha viszont beállítom mondjuk 10-re, akkor egyből eldobja a connectiont a 15 másodperc után.await Task.Run(() =>
{
Parallel.ForEach<int>(Enumerable.Range(1, 10), new ParallelOptions { MaxDegreeOfParallelism = 1 }, (number) =>
{
using (SqlConnection conn = new SqlConnection(@"Server=.;Database=TestDB;Trusted_Connection=True;"))
{
SqlDataAdapter adapter = new SqlDataAdapter("WAITFOR DELAY '00:00:40' SELECT 'Hello World!' AS [Data]", conn);
adapter.SelectCommand.CommandTimeout = 0;
DataTable dt = new DataTable();
adapter.Fill(dt);
Console.WriteLine(dt.Rows[0][0]);
}
});
});
-
sztanozs
veterán
válasz
leslie23 #9798 üzenetére
COM-ot nem fogsz tudni parallelizálni szerintem, Excel COM csak egy instance-el dolgozik, össze fog akadni biztosan.
Az adatbázis más kérdés, de ha feldolgozási oldalon van a probléma, akkor nem fogsz nagyobb telejsítményt kisajtolni belőle így sem.Amúgy adatbázisban legtöbbször az a gond (INSERT-nél), hogy egyesével viszik fel a rekordokat, így minden utasítás külön tranzakció, és baromi nagy az overhead. Ha fel tudod vinni ezresével, vagy az egészet egszerre, akkor sokkal gyorsabb lesz már ettől is.
-
leslie23
tag
Nagyon köszi a válaszokat! És valóban, az a szál dobja az hibát, amelyiken a query több, mint 15 másodperce fut (dokumentáció írja is, hogy a default connection timeout 15 sec, command timeout pedig 30).
Ami viszont számomra nagyon furává teszi az egészet... Ha egyetlen szál fut (csak egy kiugróan hosszú queryt választok ki a 70 közül), akkor ugyanezen kóddal nem dobja el a kapcsolatot és közel 50 másodpercig nyitva van a connection és leszedi szépen az adatokat. Command timeout be van állítva 0-ra (ez eddig is be volt), de a connection timeout a default értéken (15 sec) van. Ez magyarázza, hogy az első verziónál, szekvenciális végrehajtás mellett miért nem jött elő a connection timeout hiba a néhány hosszabb querynél sem.
Viszont onnantól kezdve, hogy a parallel szálakon, szimultán futnak a query-k és explicit módon nincs meghatározva a connection timeout, rögtön ketyeg a 15 másodperc...Ennek esetleg valamilyen SQL-oldali beállítás lehet az oka?
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kuponkunyeráló
- Fujifilm X
- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- One mobilszolgáltatások
- World of Tanks - MMO
- Honor Magic6 Pro - kör közepén számok
- LEGO klub
- Vékonyabb lett, jobb kamerát kapott, de az akku maradt a régi: itt a Fold7
- Kerékpárosok, bringások ide!
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- PS4 Slim + VR szemüveg // Számla // Garancia //
- Steelseries Apex Pro TKL - UK ISO - AJÁNDÉK PUDDING KEYCAP
- ASUS ROG STRIX 850W GOLD Fehér / White Moduláris Tápegység
- TUF A15 FA506IU 15.6" FHD IPS Ryzen 7 4800H GTX 1660Ti 16GB 512GB NVMe magyar vbill gar
- Samsung HW-QS700F 3.1.2 Hangprojektor (BONTATLAN!)
- Cisco Catalyst C1000-48T-4G-L 48xRJ45 4xSFP switch, CISCO refurbished
- LG 27UL500-W - 27" IPS - 3840x2160 4K - 60Hz 5ms - HDR10 - AMD FreeSync - 300 Nits - sRGB 99%
- LG 42C3 - 42" OLED EVO - 4K 120Hz 0.1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - A9 Gen6 CPU
- LG 45GR95QE - 45" Ívelt OLED / 2K WQHD / 240Hz 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- AKCIÓ! 6TB Seagate SkyHawk SATA HDD meghajtó garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest