Hallo Leute,
ich möchte gerne eine .net-standard-lib dotfuscaten. Da ich VS2019 verwende, dachte ich an den PreEmptive Dosfuscator. und frage ob das ne gute Entscheidung ist, oder einen anderen nehmen soll und dann welchen?
Zudem frage ich mich wieso eine build in Dotfuscation in VS vorhanden ist? und der code schon beim compilieren verschlüsselt wird!? So wie ich gelesen hab, wird ja bei den dotfuscation tools die fertige dll verschlüsselt richtig?
Was muss ich generell beachten, wenn ich dll herausgebe, damit diese nicht so einfach lesbar decompiliert werden können!?
Habt ihr da ein Tipp bzw. Vorgehensweise?;)
Danke und schönen Sonntag noch;)
@micha7 sagte in Viele Zahlen in ein Array schreiben:
stimmt, diese Lösung ist noch besser.
Aber sie ist nicht identisch und tut vor allem nicht das, was du ursprünglich gefragt hast. Denn falls du irgendwo b kopiert hast, änderst du dort die Daten nicht und hast dann 2 unterschiedliche Arrays. Du schreibst also nicht in das Array hinein, sondern nimmst einfach ein neues, anderes Array. Es ist also etwas anderes - ob es das ist, was du willst, musst du anhand deines restlichen Codes entscheiden.
Mit Linq in einer Zeile machbar: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.max
Wahrscheinlich nicht die Idee deiner Aufgabenstellung, aber die vier Zeilen solltest du noch alleine schaffen. Ansonsten zeig was du probiert hast und/oder stelle Fragen wo du Verständnisschwierigkeiten hast.
@Mechanics sagte in Sortier-Reihenfolge im DataGridView:
DataGridView.ColumnHeaderMouseClick
Damit geht es sogar noch besser, nämlich nur wenn man in die Kopfzeile klickt.
Michael
Guten Morgen Leute,
ich habe schon bissel recherchiert umd "ConfigureAwait(false)" der TPL zu verstehen. Wenn ein Task mit ConfigureAwait(false) markiert versehen wird, dann kommt dieser in einem "anderen" Thread Context zurück.. was ich gar nicht verstehen was damit gemeint ist
Aber zuerst, habe ich den überhaupt Async/Await verstanden? Nehmen wir an ich habe 3 Aufgaben seriell zu erledigen, und jede Aufgabe gibt ein Ergebnis für die nächste zurück. Dann würde ich das ganze so mit der TPL machen:
async void DoCompleteWorkAsync()
{
object data = ...;
object myResult = null;
var resA = await DoWorkAAsync(data);
var resB = await DoWorkBAsync(resA);
var resC = await DoWorkCAsync(resB);
myResult = resC;
}
Das ist schonmal klar (denk ich). Wenn ich das ganze nun mit klassischen Thread (ohne den async/await syntatic sugar), lösen würde, würde das so ausehen : (hier verschachtele ich die Kontexte der Threads)
VAriante A:
void DoCompletWorkA()
{
object data = 0;
object myResult = null;
var waitAll = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem((i) =>
{
var resA= DoWorkA(i);
ThreadPool.QueueUserWorkItem((i1) =>
{
var resB = DoWorkB(i1);
ThreadPool.QueueUserWorkItem((i2) =>
{
var resC = DoWorkC(i2);
myResult = resC;
waitAll.Set();
}, resB);
}, resA);
}, data);
waitAll.WaitOne();
}
und nun Variante B (welche dann async/await mit ConfigureAwait gleicht.. richtig??) :
void DoCompletWorkB()
{
object data = 0;
object myResult = null;
var waitAll = new AutoResetEvent(false);
object resA = null;
ThreadPool.QueueUserWorkItem((i) =>
{
resA = DoWorkA(i);
waitAll.Set();
}, data);
waitAll.WaitOne();
object resB = null;
ThreadPool.QueueUserWorkItem((i1) =>
{
resB = DoWorkB(i1);
waitAll.Set();
}, resA);
waitAll.WaitOne();
object resC = null;
ThreadPool.QueueUserWorkItem((i2) =>
{
resC = DoWorkC(i2);
waitAll.Set();
}, resB);
waitAll.WaitOne();
myResult = resC;
}
hier springe ich immer wieder nach jeder Arbeit in den ursprungs Kontext zurück.. ist nun das was ConfigureAwait(false) tut?
Oder habe ich generell was nicht kapiert?;)
Eine generelle Liste aller Operatoren gibt es in C#-Operatoren (welche [fast] alle von den Standard-Datentypen unterstützt werden).
Eine einzelne Auflistung gibt es auch noch unter Ausdrücke: Arithmetische operatoren (und folgende Abschnitte).
Und noch ne Frage zu folgenden Code:
ich will eine list von async events ausführen, das anfügen und löschen von IAsyncEventHandler kann asynchron passieren, deswegen mach ich eine kopie via lock.. kann ich das auch elliganter lösen?
public async Task AsyncInvoke(Args input, CancellationToken cancellationToken)
{
/* need to sync _requestHandler access */
IAsyncEventHandler[] Aggregate()
{
lock (_requestHandler)
{
return _requestHandler.ToArray();
}
}
await Task.WhenAll(Aggregate());
}
EDIT: So ists wohl elegante;:
await _semaphoreSlim.WaitAsync(cancellationToken);
try
{
await Task.WhenAll(_requestHandler);
}
finally
{
_semaphoreSlim.Release();
}
}
wobei ich gelessen habe das dies zweck Threading context mit ConfigureAwait probleme machen kann?
@SoIntMan
Wenn du was von mir wissen willst ist es schlau wenn du "@hustbaer" schreibst und nicht "Husbaer". Weil ich bei "@hustbaer" sehe dass mich jemand getaggt hat, bei "Husbaer" dagegen nicht. Also auch nicht wenn du es richtig geschrieben hättest statt das "t" wegzulassen.
Woher soll ich wissen was der Code macht den du mir nicht zeigst?
Was soll sonder das disconnect mit der "überbrügung intanz vornimmt, und die alte schon null ist" heissen? Erstmal is da wohl ein dass-das Fehler drin. Dann fehlt bei "sonder" wohl ein "n" am Schluss? Und dann ... "überbrügung"? Dafuw? Und selbst wenn ich annehme dass du "überprüfung" schreiben wolltest wird da immer noch kein für mich verständlicher Satz draus.
@Dravere sagte in CefSharp / WinForms - automatisierte Mausklicks - ein Klick fehlt:
Aber ich vermute, dass es auch so nicht funktionieren wird.
Da hast du leider Recht.
Wenn der Code wirklich direkt nach Programmstart nur einmalig ausgeführt werden soll (und unabhängig von der MainForm ist), dann sollte der Code (bzw. der Aufruf) direkt in die Program.Main-Methode geschrieben werden.
Edit: Ups, das hat @hustbaer ja schon geschrieben (naja, doppelt hält besser).
@xX_Lucas_Xx sagte in Sudoku Spiel programmieren:
selbstständig ein Programm programmieren
Mach das. Vor allem den letzten Teil
@xX_Lucas_Xx sagte in Sudoku Spiel programmieren:
(Bsp. Freiberufler)
YMMD
@xX_Lucas_Xx sagte in Sudoku Spiel programmieren:
Lucas-Friedrich-Sachsen@web.de
Jetzt weiß dein Prof genau, wer durchfallen wird.
Bei Benutzung vom Windows-Standard-"Datei öffnen/speichern"-Dialog wird automatisch eine Liste in der Registry unter HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU(bzw. ab Win7 OpenSavePidlMRU) abgelegt, welche man dann selber nutzen kann, s.a. OpenSaveMRU.
In der Antwort zu Getting the last opened file in fileopen dialog box gibt es C#-Code zum Auslesen der Registry (wenn auch mit Schreibfehler 'extention' statt extension;-).
Edit: Ab Win7 muß der Registry-PIDL-Wert noch mittels SHGetPathFromIDList in einen Dateipfad umgewandelt werden, s.a. C#-Code in "c# Registry System.Byte[] to string".
PS: Unter OpenSaveFilesView gibt es sogar ein Extra-Programm zum Anzeigen dieser Daten.