- Milyen routert?
- A személyre szabott reklám lehet a streaming következő slágere
- AI generálja majd a képeket a Photoshopban
- Átjutottak a Ciscón, betörtek a kormányok hálózataiba
- Otthoni hálózat és internet megosztás
- ASUS routerek
- DIGI kábel TV
- Windows 10
- 3 évre zárnák börtönbe a legnagyobb kriptotőzsde korábbi vezetőjét
- eBay
Új hozzászólás Aktív témák
-
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? -
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.
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...
-
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 #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).
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...
-
rgeorge
addikt
válasz leslie23 #9804 üzenetére
Biztos, hogy a SqlDataAdapter-t is szabályosan kellene használni (IDisposable). A probléma szempontjából nem releváns, de a DataTable is az. Simán előfordulhat, hogy a nem lezárt (dispose-olt) adapter miatt a connection sem zárul le.
Picard: "What we leave behind is not as important as how we've lived. After all, Number One, we're only mortal." Riker: "Speak for yourself, sir. I plan to live forever."
-
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.
[ Szerkesztve ]
-
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
Xbox One: bandymnc
-
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]
[ Szerkesztve ]
-
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
Xbox One: bandymnc
-
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. -
sztanozs
veterán
válasz leslie23 #9811 üzenetére
Alapból szinte semmi nem thread safe.
Persze lehet, hogy változott valami ebben a témában az elmúlt néhány évben, de őszintén szólva kétlem.[ 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...
-
Flashback
addikt
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?
[ Szerkesztve ]
Bocs nincs hosszú ö, ü és néha az á is ä :)
-
sztanozs
veterán
válasz Flashback #9815 üzenetére
viszont abba a windows defender beleszólhat (vagy más lokális tűzfal), a többivel talán kevesebb a szívás...
[ 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...
-
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? -
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
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.[ Szerkesztve ]
-
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.
[ Szerkesztve ]
-
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
}[ Szerkesztve ]
-
sztanozs
veterán
válasz ReSeTer #9823 üzenetére
Nem fogja folytatni, mert ez egy dialógusablak (ShowDialog) - addig nem folyatatódik a kód futása, amíg az ablak be ne csukódik. Esetleg Timerrel tudod megoldani a dolgot.
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...
-
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.[ Szerkesztve ]
-
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
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.[ Szerkesztve ]
-
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);
}[ Szerkesztve ]
-
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.[ Szerkesztve ]
-
quailstorm
nagyúr
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.
[ Szerkesztve ]
-
félisten
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";
}
}
}Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
ReSeTer
senior tag
Ok, köszönöm mindenkinek. Megnézem ezeket.
[ Szerkesztve ]
-
sztanozs
veterán
-
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?
Xbox One: bandymnc
-
bandi0000
nagyúr
Kevertem valamiért, amúgy .net 461 amibe megy a peojekt, szal gondolom 3.5 ös a franework verziója
Kipröbáltuk azt, hogy egy basic tároltat hívunk tranzakcióval, ef.tranzakción belül és ott visszavonta, független attól jó ötlet e, viszont ott 1 adatbázis volt csak
Xbox One: bandymnc
-
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
Xbox One: bandymnc
-
É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.
[ Szerkesztve ]
-
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?
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
DrojDtroll
addikt
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 -
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.
-
Keem1
addikt
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?
-
M_AND_Ms
addikt
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?Aki tejszínhabot szeretne, az inkább verje ki a fejéből!
-
cigam
félisten
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?[ Szerkesztve ]
Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- HP EliteBook 640 G9 Ezüst (14" / Intel i5-1235U / 16GB / 512GB SSD / Win 11 Pro) -10% Most 203.990 F
- Lenovo M810z AIO Core I5 6400 4x2700/8GB/120G SSD/wifi/cam 21,5 -10% 66.950 ft
- Microsoft Surface Book 2 - i7-8650u/8GB/256GB SSD/Windows 11 -. 10% Most Csak 125990 Forint
- Microsoft Surface Go 2 tablet - 10% Most Csak 72660 Forint
- JBL Partybox 710