Hirdetés

2024. június 1., szombat

Gyorskeresés

Hozzászólások

(#7651) Domonkos válasza summers (#7650) üzenetére


Domonkos
Ármester

Ez majdnem egy az egyben az utazo ugynok problema - nincs ra polinomialis ideju algoritmus.
Ha megis talalnal, akkor kuldj privatot - nagyon sok penzt fizetek erte :K
Brute force modszerrel meg nem erdemes elindulnod mert ~4840000000000000000000000000000000000000000000000000000 Joule energiara lesz szukseged hozza 70 ponthoz... Ez pedig sok. Ertelmes kozelitest viszont adhatsz. :K

Gender of electrical connectors is defined by the pins.

(#7652) summers válasza Domonkos (#7651) üzenetére


summers
tag

Ok, köszi!

(#7653) szoke12


szoke12
őstag

Sziasztok!
Keresgéltem a témában, de nem jutottam még megoldásra. A problémám, hogy a programomban van 3 usercontrol, és a főablakból szeretnék lefuttatni egy metódust az egyik controlban. Odáig eljutottam, hogy meghívjam, de megáll a futás és azt az üzenetet kapom, hogy "Az objektumhivatkozás nincs beállítva egyetlen objektumpéldányra sem."
A controlokat párhuzamosan hívom meg és egyszerre dolgozok bennük, és szeretnék mentést készíteni a pillanatnyi tartalmukból. A KablistaControl tartalmazza az ExportToCsv() metódust, ami egy lista elemeit kiírja egy csv fájlba. Ha a controlon belül hívom meg, minden rendben, elkészül a file, de ha a főablakból, akkor hiába van addigra feltöltve a lista, nem akarja. Mit csinálok rosszul?

A meghívás:
(this.Parent as KablistaControl).ExportToCsv();

:R

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#7654) Raftsman válasza szoke12 (#7653) üzenetére


Raftsman
csendes tag

Szia!

As opertáror eredménye véletlenül nem null lesz. Feltételezem, hogy a this.parent-et nem tudja castolni.

(#7655) sirszevenap


sirszevenap
addikt

Sziasztok.

Lenne itt esetleg olyan, aki kicsit otthon van a Xamarin.Forms-ba? Sajnos halott (ill inkább nincs) a topic ami ebben a témában mozog.

Köszi! :R

Bankkártyával? Hát persze!

(#7656) szoke12 válasza Raftsman (#7654) üzenetére


szoke12
őstag

Köszönöm!
Mit jelent az, hogy castolni?

Illetve újabb gondba ütköztem. Nem tudom, hogy kell használni a wait-ot. Próbáltam utánaolvasni, és néhány tesztet is csináltam, de megy tovább. :(
Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik. Amit egy felugró ablakban változtatok meg.
Bár egyszerűbb lenne külön saját ablakot írnom, és azt meghívni, csak azt meg wpf-ben nem jöttem rá hogy kell. Illetve az ottani adatok elérésével vagyok bajban. :(
Bocsi, nagyon kezdő vagyok.

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#7657) harylmu válasza szoke12 (#7656) üzenetére


harylmu
őstag

"Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik."

Nem szívesen mondanám el, mert ha ilyet kell csinálnod, 90% hogy rossz az alkalmazás design-ja. Ha raksz be pár code snippetet (az egész is mehet pastebin.com-ra) akár tudunk segíteni, hogyan lehetne ezt normálisan.

[ Szerkesztve ]

(#7658) szoke12 válasza harylmu (#7657) üzenetére


szoke12
őstag

Szia!
Köszönöm a választ! A kódomból ennyit érint a dolog:

if (z == 0)
{
new Kerdezo().Show();

switch (z)
{
case 0: break;
case 1:
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
break;
case 3: break;
case 4:
objKabels.Clear();
return objKabels;
}
}

if (z == 2)
{
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
}

Az program elején a deklarálom a z-t 0 értékkel. És egy felugró ablakban (Kerdezo) szeretném eldönteni, mennyi az értéke. Ugyanis az ablakban 4 lehetőségből kell választani, és annak fényében módosul a z. Itt pedig aszerint futna tovább a program hogy mennyi a z. Ha z=1 akkor javít egy bejegyzést, és utána megint lefut ez az egész ciklus és megint megkérdezi, hogy javítsa-e a következőt. Ha z=2, akkor mindet javítja automatikusan, ha 3, akkor azt az egyet kihagyja, de a többit megint megkérdezi, ha 4, akkor pedig kilép a metódusból.
Talán nem a legszebb megoldást választottam ehhez, de még csak gyakorolgatok.
És nekem az kéne, hogy a ciklus ne fusson tovább a switch-re, Hanem várja meg, amíg a Kerdezo bezárul.
De hogy a Kerdezo-ből hogy kapom meg az adatokat, meg hogy az hogyan változtatja a Usercontrol z-jét, még annak utánaolvasok....

[ Szerkesztve ]

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#7659) harylmu válasza szoke12 (#7658) üzenetére


harylmu
őstag

1. )Nagyon rosszak a naming conventionök. Mi az hogy z? Mi az hogy Kerdezo?

2.) Igen, a flow így nem igazán jó. Aszinkron lett, viszont szinkronnak kell lennie. Fontos, hogy a Show() után ne menjen tovább a kód.

a.)

public void ExecuteWhateverLogicOnZ(int z)
{
var dialogResult = new Kerdezo().ShowDialog();
//kezdj valamit a result-tal. lényeg hogy addig ne folytatódjon a kód amíg nincs eredménye a kérdezőnek.
}

b.)

public void ExecuteWhateverLogicOnZ(int z)
{
if (z == 0)
{
new Kerdezo(this).Show();
return; //egyből kilépsz a metódusból
}

// more code here
}

public class Kerdezo : Form
{
private OriginalForm _originalForm;
public Kerdezo (OriginalForm originalForm)
{
_originalForm = originalForm;
}

private void Form1_FormClosing(object sender, EventArgs e) //arra az eventre iratkozz fel amikor a z módosul
{
var result = sender as WhateverResult;
_originalForm.ExecuteWhateverLogicOnZ(result.Valasz);
}
}

[ Szerkesztve ]

(#7660) sztanozs válasza sirszevenap (#7655) üzenetére


sztanozs
veterán

Szerintem senki nincs igazán otthon, de írd be nyugodtan mi a gondod és majd együtt megpróbálunk rájönni :D

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7661) sirszevenap válasza sztanozs (#7660) üzenetére


sirszevenap
addikt

Igazából pitiáner dolognak látszódó dologról lenne szó (amire nem találok megoldást már 1 hónapja). A problémám a listview-val van. Expander listview, tehát van egy úgymond fejléce és arra tappolva jelenik meg a hozzá tartozó content majd újra tappra bezárul. Androidon tökéletesen működik, iOS-en képtelen normálisan lerenderelni a ViewCell méretváltozását és vibrálva jelenik meg. Értsd: Tappolás után lenyílik a content helye (felveszi a megfelelő méretet a ViewCell), ekkor a content elvan csúszva és amikor az "animáció" befejeződött és a ViewCell felvette a méretét akkor teszi bele a tartalmat, tehát amikor teljesen kinyílt. Ez ad vibráló hatást, ami nagyon zavaró. Androidon tökéletes. Gyakorlatilag ott ilyen lenyíló animáció sincs, csak megjelenik a tartalom minden sallang nélkül.

Itt egy kép róla:

Itt pedig a teljes videót megnézhetitek, mi a pontos baj. Az iOS-re figyeljetek, hogy nyitogatja és zárja. Egy ilyen megoldást pl Én nem adnék ki a kezeim közül, pláne ne a storeok-ba: Expandable ListView in Xamarin Forms

Bankkártyával? Hát persze!

(#7662) sztanozs válasza sirszevenap (#7661) üzenetére


sztanozs
veterán

Ennyit találtam neked:
http://www.telerik.com/forums/custom-cell-with-image-stutters-when-scrolling-on-android
Bár kicsit régi a thread, lehet, hogy ez is egy 'known limitation' még iOS-en.

Amúgy add/remove helyett ezzel is kipróbáltad: INotifyPropertyChanged, ezzel is csinálja ezt az "összeomlasztást"?

Ezt találtam még neked: [link]
- Avoid changing the cell layout based on the BindingContext. This incurs large layout and initialization costs.

Custom Renderer: [link]

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7663) sirszevenap válasza sztanozs (#7662) üzenetére


sirszevenap
addikt

Természetesen csak ezzel dolgozom! :) Komplett hülyeségnek tartom állandóan törölni és újrahúzni a listát. Sajnos nem működik rendesen. Eleve probléma volt az elején, hogy ki sem nyílt (amint letekertem a listát majd vissza, akkor pedig már nyitva volt).Aztán ForceUpdateSize(); meghívásával ez megoldódott, viszont rohadt igénytelennek hat a az animáció iOS-en. Természetesen Androidon ez sem kellett. :) Van baj ezzel az iOS-el bőven. De köszönöm neked, hogy utánanéztél. :R Tudom egyébként mindenkinek ajánlani a Xamarin.Forms-ot, ilyen kisebb gyerekbetegségeitől eltekintve nagyon jó cucc. Szinte bármilyen utólagos munka nélkül képes ugyan úgy funkcionálni 4 platformon ez egyszem' kód! :K (Android,iOS,WP,UWP)

[ Szerkesztve ]

Bankkártyával? Hát persze!

(#7664) sztanozs válasza sirszevenap (#7663) üzenetére


sztanozs
veterán

Custom Renderer-t is megnézted? Lehet, hogy csak le kellene tiltani a rendering animációt.

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7665) sirszevenap válasza sztanozs (#7664) üzenetére


sirszevenap
addikt

No erre ránézek!

Bankkártyával? Hát persze!

(#7666) eddie17


eddie17
addikt

Sziasztok!
Most tanulok szoftverfejlesztőnek és természetesen a fő csapásirány a C#.
Mivel előtte én nem foglalkoztam ezzel ezért nincs tapasztalatom benne, viszont szeretnék!
Nem tudom jó helyen írok, hogy bárki dolgozik olyan projekten amibe be lehet csatlakozni és tapasztalatot szerezni az szóljon!
Egy a lényeg nekem, hogy élesben is tudjak foglalkozni vele!
Privátban elértek ha adódna ilyen alkalom, amolyan "laborgyakorlat" címen. :)

[ Szerkesztve ]

(#7667) harylmu válasza eddie17 (#7666) üzenetére


harylmu
őstag

Mi az hogy éles? Miért nem csinálsz valami kis saját gyakorló projektet pl githubon? Mondjuk valami eCommerce alkalmazás microservice-ekkel, ott aztán mindent tudsz gyakorolni. :) Docker, SPA frontend, backend, ORM stb. Microsoft-é jó kiinduló pont lehet.

Hogyha úgy érzed ez nem menne, akkor csinálhatsz csak egy szimpla MVC projektet is, az is tök jó gyakorlás.

[ Szerkesztve ]

(#7668) sirszevenap válasza sztanozs (#7664) üzenetére


sirszevenap
addikt

Közben jelzem, sikerült! :) Bár Androidon a CR nem akar menni, megtudom mondani azt, hogy melyik platformon melyik képernyőre navigáljon, így csináltam két képernyőt és tökéletes! :R

Bankkártyával? Hát persze!

(#7669) szoke12 válasza harylmu (#7659) üzenetére


szoke12
őstag

Köszönöm szépen a válaszod! Megpróbálom ennek fényében javítani a kódot.
:R

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#7670) eddie17 válasza harylmu (#7667) üzenetére


eddie17
addikt

Szia. Igaz ez is egy járható út. Köszönöm belevetem magam. :)

(#7671) szoke12


szoke12
őstag

Az eddigi gondjaimat sikerült orvosolni, nagyon köszönöm! Most az lenne a kérésem, hogy hogyan tudok egy olyan toolbart készíteni, ami minden usercontrol esetén megfelelően viselkedik. Szóval van egy usercontrol, és amikor abban dolgozok, akkor a toolbar elmei arra a usercontrolra vonatkozó metódusokat hívják meg, amikor egy másikban, akkor pedig azokat.
Nem feltétlen kódrészekre lennék elsőkörben kíváncsi, inkább arra hogy ezt logikailag hogyan képzeljem el.

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#7672) tboy93


tboy93
nagyúr

Sziasztok!

Adott az MNB webservice, amin keresztül az árfolyamokat szeretném lekérni. WPF appban simán ment, viszont UWP alkalmazásban valahogy async kéne ezt megoldani és sehogy sem jutok dűlőre vele. Hogyan kéne kijavítanom az alábbi függvényt, hogy jól működjön?

public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();

MNBService.MNBArfolyamServiceSoapClient client = new MNBService.MNBArfolyamServiceSoapClient();

MNBService.GetCurrentExchangeRatesRequestBody eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
MNBService.GetCurrentExchangeRatesResponseBody eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);

string eratesResp = eRatesResponseBody.GetCurrentExchangeRatesResult;

XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(eratesResp);

XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;

foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}

await client.CloseAsync();

return currList;
}

[ Szerkesztve ]

(#7673) martonx válasza tboy93 (#7672) üzenetére


martonx
veterán

Ez a kód így ránézésre nem tűnik rossznak.
Tudom hit vita, de én az ennyire egyértelmű kilométer hosszú deklarációk helyett jobban szeretem a var-t használni. Az ilyen bedobott kódokon is sokat javít, ha nem kell annyit jobbra görgetni :)

Mi a konkrét gondod a kóddal?

Én kérek elnézést!

(#7674) harylmu válasza tboy93 (#7672) üzenetére


harylmu
őstag

Nekem lefut kicsit átalakítva.

1.) Nem int.Parse hanem double.Parse kell.
2.) Ahogy martonx írta, olvashatóság miatt inkább var-t használj.
3.) Illetve ezt kellett még átalakítani:

var eRatesRequestBody = new ServiceReference1.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var resultAsString = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;

XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(resultAsString);

GetCurrentExchangeRatesAsync visszatérési értéke GetCurrentExchangeRatesResponse, nálad pedig ResponseBody.

De egyébként debuggert nem használsz? :)

[ Szerkesztve ]

(#7675) tboy93 válasza martonx (#7673) üzenetére


tboy93
nagyúr

A függvény nem jut túl ezen a soron:

MNBService.GetCurrentExchangeRatesResponseBody eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);

Nem fagy ki, csak nem fut le ...

(#7676) tboy93 válasza tboy93 (#7675) üzenetére


tboy93
nagyúr

Rendben, átírtam var-ra, így jobban olvasható.

Most így néz ki a két függvényem:

GetList()
public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();

var client = new MNBService.MNBArfolyamServiceSoapClient();

var eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var result = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;

XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(result);

XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;

foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}

await client.CloseAsync();

return currList;
}

GetExchangeRates()
private void GetExchangeRates()
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if(currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
}

Ezzel így, konkrétan nem tölt be az alkalmazás.

Használok brakpointokat, a task-nál ezzel szembesülök: Result = "{Not yet computed}"

Értem, hogy nincs még meg az adat, csak ezt hogyan kezeljem? :F

És köszönöm mindenkinek a segítséget!

ui.: a Model.Currency Value értéke integer, nincs szükséges a tört részre

[ Szerkesztve ]

(#7677) harylmu válasza tboy93 (#7676) üzenetére


harylmu
őstag

Az if (x.Attributes.Item(1).InnerText == "USD") után tennék a helyedben egy entert és a breakpointot a currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) }); sorba tenném. Ha beakadt a breakpoint nyomj egy F10-et és kapni fogsz egy exceptiont. ;)

"a Model.Currency Value értéke integer, nincs szükséges a tört részre"

Akkor ügyesen parse-old.

[ Szerkesztve ]

(#7678) tboy93 válasza harylmu (#7677) üzenetére


tboy93
nagyúr

Valóban kaptam exceptiont :R Átírtam Double-re most hipp-hopp, így már a GetList() visszaadja azt a listát amit kell, viszont a GetExchangeRates()-el még mindig nem jó valami, mert kék képernyővel kiakad az app. Ha a task.Wait()-től kikommentezek mindent akkor elindul, csak úgy nem sok értelme van :DDD

(#7679) tboy93


tboy93
nagyúr

No, kicsit átalakítottam.

private async Task GetExchangeRates()
{
await Task.Run(() =>
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
});
}

Viszont amire nem számítottam, hogy összeakad itt a RaisePropertyChange-el:

public double Usd
{
get { return usd; }
set
{
usd = value;
RaisePropertyChanged("Usd");
}
}

Aszongya:
An exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Runtime.WindowsRuntime.dll but was not handled in user code

Additional information: Az alkalmazás olyan objektumfelületet hívott, amely egy másik szálhoz volt rendelve. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

(#7680) harylmu válasza tboy93 (#7679) üzenetére


harylmu
őstag

Task.Run-ban 99%ban nem szabad semmit wrappelni. (+ link) Pláne hogy mégcsak async-á se tetted. :)

var currencies = await Service.CurrencyService.GetListAsync(); // naming convention: async metódus async-ra végződik
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}

Ez hol hal meg? RaisePropertyChanged dob exceptiont? Illetve fingom sincs UWP-ban hogy van a szálkezelés, de tudtommal, ha UI controlt akarsz frissíteni másik threadről nem árt Dispatcher-t használni.

[ Szerkesztve ]

(#7681) tboy93 válasza harylmu (#7680) üzenetére


tboy93
nagyúr

Igen, a RaisePropertyChanged dobja az exceptiont. Koszi a tippeket, holnap ha a projekt kozelebe kerulok kiprobalom a linkelt dolgokat :R

(#7682) harylmu válasza tboy93 (#7681) üzenetére


harylmu
őstag

Nézegettem közben, RaisePropertyChanged-nek úgy fest UI thread-en kell mennie és Dispatcher-rel kell futtatni. Hasonlóan mint itt.

(#7683) tboy93 válasza harylmu (#7682) üzenetére


tboy93
nagyúr

Koszonom, kiprobalom amint tudom, csak sose vagyok otthon.

(#7684) togvau


togvau
senior tag

Kezdő C#-osként egy URL-ről streamként olvasott fájlt kéne dekódolnom, ami AES 128bit kódolású.

Eddig ennyi, oda a ConvertToStream köré kéne a dekódolás.
var reader = new BinaryReader(new GZipStream(ConvertToStream(DB), CompressionMode.Decompress));

Java-ban van olyan, hogy "CipherInputStream", és ott elég egyszerű. De itt hogy?

[ Szerkesztve ]

hitler, sztálin, micro usb

(#7685) harylmu válasza togvau (#7684) üzenetére


harylmu
őstag

Google: C# AES 128 decode
vagy C# Rijndael decode

[ Szerkesztve ]

(#7686) togvau válasza harylmu (#7685) üzenetére


togvau
senior tag

Ezt én is meg tudom csinálni, és meg is kapom azt a sok használhatatlan, és nem működő kódot, amire persze nincs működő válasz.

hitler, sztálin, micro usb

(#7687) harylmu válasza togvau (#7686) üzenetére


harylmu
őstag

:U

(#7688) sztanozs válasza togvau (#7686) üzenetére


sztanozs
veterán

Itt is van: CryptoStream, még példa is van a cikk alján.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7689) tboy93 válasza harylmu (#7682) üzenetére


tboy93
nagyúr

Köszi a tippet, sikerült megoldani :K

public double Usd
{
get { return usd; }
set
{
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
usd = value;
RaisePropertyChanged("Usd");
}
);
}
}

Más kérdés, hogy az UWP app-al pont azt nem tudom megvalósítani, ami kéne, mégpedig hogy folyamatosan látszódjon a kis appom minden más felett a sarokban. Nincs topmost funkció mint a WPF-ben :(

(#7690) togvau válasza sztanozs (#7688) üzenetére


togvau
senior tag

Valamennyire használható, de így sem dekódolja rendesen amit kéne.

Java-ban amiben működik a dekódolás ilyen a beállítása a dekódolónak:

AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
try
{
PBEKey key = (PBEKey)
SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(new PBEKeySpec(new
String(kulcsbytearr).toCharArray(), salt, 7, 128));
SecretKey encKey = new SecretKeySpec(key.getEncoded(), "AES");
dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, encKey, paramSpec);

C# nem tudom mi ennek a secretkeynek a megfelelője, szóval java-ból kihoztam a végső kulcsot az enckey-ből.

static Stream DecryptStream(Stream cipheredStream, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipheredStream == null/* || cipherText.Length <= 0*/)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");

Rijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;
rijAlg.IV = IV;
rijAlg.Mode = CipherMode.CBC;
//rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.KeySize = 128;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
return new CryptoStream(cipheredStream, decryptor, CryptoStreamMode.Read);
}

De nem stimmel a dekódolt anyag. Ilyen PKCS5 nincs is a C#-ban, csak 7

hitler, sztálin, micro usb

(#7691) sztanozs válasza togvau (#7690) üzenetére


sztanozs
veterán

Ezt nézd meg: [link]
PKCS 5 vs 7: [link]

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7692) togvau válasza sztanozs (#7691) üzenetére


togvau
senior tag

Megnéztem. Keysize-ok stimmelnek. De elkezdtem ellenőrizgetni a keyeket.
Amíg sima byte[]-ban van a key, addig stimmel a C#-os a Javassal, de miután

Rijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;

majd egy
foreach (var b in rijAlg.Key)
{
sb.Append(String.Format("{0:x2} ", b));
}
System.Console.WriteLine(sb.ToString());

Itt már tökmás a végeredmény... Ez hogy lehet?

[ Szerkesztve ]

hitler, sztálin, micro usb

(#7693) sztanozs válasza togvau (#7692) üzenetére


sztanozs
veterán

Próbáld meg az AES-t (vagy AESManaged-et) használni a Rijndael helyett, és úgy felkonfigurálni, ahogy a példában van.
Ráadásul a Java-s megoldás nem közvetlenül a key-t használja, hanem egy abból derivált (PBKDF2WithHmacSHA1) kulcsot, amihez kell salt is:
int iterations = 128;
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(enc_key, salt, iterations);
byte[] key = rfc2898.GetBytes(32);

Ezt próbáld meg illeszteni a kódodhoz.

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7694) togvau válasza sztanozs (#7693) üzenetére


togvau
senior tag

Na most van valami siker, de már úgy megkavarodtam, hogy azt sem tudom hol vagyok. Szóval az egyik fő probléma az lehetett, hogy a java kódból másolt byte tömböt byte-ként deklaráltam és kezeltem, pedig a java byte-ja a C# sbyte-jának felel meg.
Na a lényeg, hogy ha kiíratom az első dekódolt 32 byteot javaban, és C#-ban, akkor stimmel mindegyik.

De ezután kéne jönnie egy kicsomagolásnak Zlib alapon, ami nem megy, mert "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: The magic number in GZip header is not correct. Make sure you are passing in a GZip stream."

Java-ban InflaterInputStream-en megy keresztül ami az Inflater() kicsomagolót használja, C#-nál a GZipStream-en menne át ha menne, mert elvileg a zlib, gzip, pkzip kompatibilis egymással.
A javas inflater dokumentációban viszont van egy ilyen: "If the parameter 'nowrap' is true then the ZLIB header and checksum fields will not be used. This provides compatibility with the compression format used by both GZIP and PKZIP. "

Gondolom ezért C#-ban pár byteot ki kéne hagyni... de hol és mennyit...

Viszont van már DeflateStream is a .net-ben, ami full Zlib kompatibilis. Ez már más hibát ír ki "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: Block length does not match with its complement." akár akkor is ha egy ReadByte()-ot nyomok

[ Szerkesztve ]

hitler, sztálin, micro usb

(#7695) sztanozs válasza togvau (#7694) üzenetére


sztanozs
veterán

byte vs sbyte - a C# mindenhol byte-tal számol az sbyte csak speciális helyekre kell. De ha a Java tényleg signed byte-ot ad vissza (-128 - 127), akkor persze ezzel mókolni kell (de ez ugye csak reprezentáció - egy fájlba/stream-be mindegy, hogy byte-ként vagy sbyte ként írsz, a végeredmény ugyanaz lesz.

másrészt nekem úgy rémlik, hogy a GZip nem ZLib kompatibilis, nem is csodálkozom, hogy hibát dob.
A deflate pedig csak raw deflate bytestream-re használható, a headereket le kell vágni.

ZIP-re külső csomagokat érdemes használni: [link]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7696) togvau válasza sztanozs (#7695) üzenetére


togvau
senior tag

köszi, sharpziplibel már simán megette (lehet nem véletlen, hogy szinte minden C# programnál ott figyel a sharpziplib dll), minden byte stimmel dekódolás, kicsomagolás után. De a Java-s stringet még mindig nem sikerült olvasni. Ha nyomok C# binaryreaderben egy readString()-et, akkor az eredmény semmi, még hibaüzenet sem. Ugyan ez readcharnál. Csak byteot olvasva jön ki értékelhető.
Java-ban writeUTF()-el van írva a fájlban, és persze readUTF()-el olvasható is.

Olvastam róla hogy más az endianossága a c#-és a java-nak, de endianváltó libet is töltöttem, azzal se lehet byteon kívül mást olvasni, hogy legyen valami :\

[ Szerkesztve ]

hitler, sztálin, micro usb

(#7697) sztanozs válasza togvau (#7696) üzenetére


sztanozs
veterán

Text modul kell neked: [link]

tl;dr
string original = Encoding.BigEndianUnicode.GetString(binary);

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7698) togvau válasza sztanozs (#7697) üzenetére


togvau
senior tag

Nem nyert :( Csak kérdőjelek jönnek akármelyik utf-et próbálom, esetleg 1-2 nem stimmelő karakter.

[ Szerkesztve ]

hitler, sztálin, micro usb

(#7699) sztanozs válasza togvau (#7698) üzenetére


sztanozs
veterán

mentsd le fájlba az eredményt, és notepad++-al meg tudod nézni, hogy mi az encoding

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#7700) togvau válasza sztanozs (#7699) üzenetére


togvau
senior tag

ANSI-t ír. De ez nem jelent semmit. Minden szerkesztőnél, szépen látszik az összes string, ANSI, és UTF-8 kódolásra állítva is. Még a hulladék windowsos sima notepadban is.
Az első string előtt van egy 00 31 hex és mintha mindegyik adat között lenne egy 00, de nem közvetlen az első string karakter előtt vagy a string után.

hitler, sztálin, micro usb

Copyright © 2000-2024 PROHARDVER Informatikai Kft.