Laden...

Forenbeiträge von degri2006 Ingesamt 21 Beiträge

05.05.2023 - 15:41 Uhr

Ok. Danke.
Ich schlussfolgere folgendes: Main ruft MethodAAsync auf und Main ist blockiert. MethodeAAsync führt seine Befehle aus bis zum ersten await in der for-Schleife. Jetzt wird Main entblockiert und arbeitet die for-Schleife ab, MethodeAAsync wacht nach 100 ms auf, blockiert Main und führt ein Console-Befehl aus und legt sich wieder schlafen. Main macht dann weiter. 
Mit anderen Worten die asynchrone Methode, die von Main aufgerufen wird, blockiert Main bis es zu einem await stösst. Wenn es zu einem await kommt, wird Main enblockiert und arbeitet weiter bis der Task in der asynchronen Methode, der mit await aufgerufen wurde, fertig ist.
Ist das so richtig zusammengefasst?

05.05.2023 - 14:16 Uhr

Hallo,
ich habe male eine Frage zu dem untenstehendene Code. Es gibt eine Main- und MethodAAsync-Methode.
Main startet MethodAAsync mit "Task<int> taskA = MethodAAsync();" stellt es in den Hintergrund, kehrt direkt zurück und führt die for-Schleife. Das geschieht parallel zu der Ausführung von MethodAAsync. Mit "await taskA" werden MethodAAsync und Main wieder zusammengeführt. Falls MethodAAsync noch nicht fertig ist, blockiert Main an dieser Stelle bis MethodAAsync fertig ist. Ist das so richtig zusammengefasst?

static void ConsoleWriteLine(string str)
       {
           int threadId = Thread.CurrentThread.ManagedThreadId;
           Console.ForegroundColor = threadId == 1 ? ConsoleColor.White : ConsoleColor.Cyan;
           Console.WriteLine(
              $"{str}{new string(' ', 26 - str.Length)}   Thread {threadId}");
       }

static async Task<int> MethodAAsync()
       {
           for (int i = 0; i < 5; i++)
           {
               ConsoleWriteLine($" A{i}");
               await Task.Delay(100);
           }
           int result = 123;
           ConsoleWriteLine($" A returns result {result}");
           return result;
       }

static async Task Main(string[] args)
       {

           ConsoleWriteLine($"Start Program");

           Task<int> taskA = MethodAAsync();

           for (int i = 0; i < 5; i++)
           {
               ConsoleWriteLine($" B{i}");
               Task.Delay(50).Wait();
           }

           ConsoleWriteLine("Wait for taskA termination");

           await taskA;

           ConsoleWriteLine($"The result of taskA is {taskA.Result}");
           Console.ReadKey();

           return;
        }
11.08.2021 - 17:09 Uhr

Danke Dir!

11.08.2021 - 05:59 Uhr

Verwendetes Datenbanksystem: MS Access
Hallo,
ich habe eine Access DB (MS Access 2019) und dafür einen Benutzer-DSN über ODBC eingetragen. Ich würde gerne darüber eine Verbindung aufbauen. Ich habe über Link versucht so eine Verbindung auszubauen. Schon der unten stehende Code wird abgelehnt. Muss ich noch weitere NuGet Packete installieren? Ich habe Microsoft.NETCore.Platforms 5.0.2 installiert.


OdbcConnection connection; 

02.06.2021 - 08:55 Uhr

Hallo,
ich habe eine kleines Problem mit Tasks in C#.
Ich habe eine Queue mit ganzen Zahlen. Diese Zahlen sollen in einem Worker aus der Queue geholt werden.
Der Worker soll sich dann entsprechend schlafen legen. Es gibt in dem Beispiel zwei Tasks/Threads.
In der ersten Runde werden 3 und 10 aus der Queue geholt und die Tasks legen sich für 3 und 10 Sekunden schlafen.
In dem Fall wird aufgrund WaitAll in der ersten Runden auf den Task gewartet, der 10 Sekunde schläft. Wie kann ich veranlassen, dass während der eine Task 10 Sekunden schläft der nächste Task gestartet wird nachdem der 3 Sekunden Task fertig ist? Wichtig ist, dass alle Tasks korrekt beendet und nicht abgebrochen werden.


using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Concurrent;

namespace ThreadPoolApplication
{
    class Program
    {
        
        static void Main(string[] args)
        {
            ConcurrentQueue<int> myQueue = new ConcurrentQueue<int>();
            List<Task> TaskList = new List<Task>();
            myQueue.Enqueue(3);
            myQueue.Enqueue(10);
            myQueue.Enqueue(2);
            myQueue.Enqueue(4);

            while (myQueue.Count > 0)
            {

                int NumberOfThreads = 2;
                for (int i = 0; i < NumberOfThreads; ++i)
                {
                    TaskList.Add(Task.Factory.StartNew(() => { Worker(myQueue); }));

                }
                Task.WaitAll(TaskList.ToArray());
                TaskList.Clear();
            }
        }

        static void Worker(ConcurrentQueue<int> myQueue)
        {
            int element;
            
            while (!myQueue.TryDequeue(out element))
            {
                Console.WriteLine("Queue ist gesperrt");
                Thread.Sleep(5);
            }
            Console.WriteLine($"Schlafe für {element} Sekunden");
            Thread.Sleep(TimeSpan.FromSeconds(element));
            Console.WriteLine($"Aufgewacht nach {element} Sekunden");
        }
        
    }
}


28.02.2021 - 12:36 Uhr

Ok. Danke für die Tipps.

28.02.2021 - 11:07 Uhr

Habe keine using Block.
Bei mir sieht im Prinzip so aus:


public class AndereKlasse
{
	...
	public void machwas()
	{
		using var foo = new Foo();
		...
		foo.methode();
	}
	...
}  


28.02.2021 - 10:35 Uhr

Hallo,
ich habe eine Frage. Ich habe eine Klasse Foo, die das Interface IDisposable implementiert und im Konstruktor eine Exception werfen kann. Die Klasse wurde von einem Kollegen erstellt.
Ich erzeuge ein Objekt der Klasse Foo mit using.


public class Foo : IDisposable
{
	...
	Foo()
	{
		...
		throw new AAAException
	}
	...
}

Ich will einen try-catch Block haben, um die evtl. autretende Exception abzufangen:


try
{
	using var foo = new Foo();
}
catch (AAAExpception ex)
{
	....
}


Problem: Wenn keine Expception geworfen wird, kann ich von ausserhalb des try Blocks nicht auf foo zugreifen, weil foo im try Block erzeugt wurde. Was gibt es für Alternativen?

  1. AAAException im Konstrukor von Foo behandeln
  2. Alle Sachen, die auf foo zugreifen in den try Block reinschieben
  3. ?
25.02.2021 - 12:19 Uhr

Mir ging es nur grundsätzlich darum wie Ihr das mit den Exception handhabt, wenn Ihr eine Funktion bentutz, die potentiell viele Exceptions werfen kann. Unabhängig von dem Framework/Technolgie, die eingesetzt wird.

25.02.2021 - 09:48 Uhr

Es handelt sich um ein Blazor Projekt(serverseitig) unter Linux. Es werden regelmäßig zip-Dateien in einem Verzeichnis abgelegt(/quellverzeichnis/md5einerbestimmtendateiimzip/a1.zip.). Das Verzeichnis hat nur Leserechte. Die Zip-Datei hat immer eine bestimmte Datei(log/log.json), die ich zum Weiterverarbeiten brauche. Diese Datei entpacke einem Hintergrundthread in ein Verzeichnis(Verzeichnis muss erzeugt werden) auf dem ich Schreibrechte habe: /verzeichnismitschreibrechten/md5einerbestimmtendateiimzip/log.json. Thread checkt voher ob, die Datei existiert. Wenn ja, dann geht zur nächsten zip. Wenn er alle zips durch sind, dann geht er für 10 Minuten schlafen.

25.02.2021 - 07:44 Uhr

Hallo,
ich habe eine Best Practice Frage zu Exception Handling. Ich habe zwei Funktionen System.IO.CreateDirectory und System.IO.Compression.ExtractToFile. Diese Funktionen können ja viele Exceptions werfen. Was wäre hier Best Practice? Ich würde nur die Exceptions catchen, die in meinem Fall auftreten können und am Ende würde ich die allgemeinste Exception Klasse catchen. Was meint Ihr?

01.02.2021 - 19:28 Uhr

Hi,
danke für die Info. Ich arbeite auf einer Linux Maschine. dotnet --list-sdks sat 5.0.102. Ich habe auf derselben Maschine eine ziemlich genaue, aber etwas einfacherer Konstellation hergestellt und in dem Fall klappt es auch. Ich muss es mir morgen genauer angucken, warum es mit dem ursprünglichen Fall nicht klappt, aber bei dem anderen, das äquivalent ist, klappt.

01.02.2021 - 16:03 Uhr

Hallo,
ich habe einen Problem. Ich habe einen String und enthält u.a. folgende Zeile:


$a= "blablablablablablablabla\x00" wide nocase

Ich will die Substrings links und rechts vom Gleichheitszeichen in seperate Variablen speichern.
line.Split("=")[0] -> $a
line.Split("=")[1] -> "blablablablablablablabla\x00" wide nocase

Links vom Gleichheitszeichen wird korrekt gespeichert, der String rechts vom Gleichheitszeichen macht Probleme:
"blablablablablablablabla
Es wird beim Nullterminator abgebrochen. Kann mir jemand einen Tip geben wie ich den String rechts vom Gleichheitszeichen komplett abspeichern kann?

28.01.2021 - 16:05 Uhr

Ok. Danke für das Feedback.

28.01.2021 - 09:20 Uhr

Hallo,
ich habe in Blazor ein html-Konstrukt, dass immer wieder auftaucht und immer komplett ausgeschrieben ist. Ich habe es mal auf ein einfaches Konstrukt runtereduziert.


<h4>Headline</h4>
<div>text</div>

Dieser o.g. Code taucht öfters in dem HTML-Code auf. Möchte es auslagern auf eine Funktion/Methode. Als Parameter sollen der Text für die Headline und den Div-Container übergeben werden.
Habe es mir so vorgestellt, das aber nicht klappt:


<div class="Container">
...
@foo("Uberschrift","Text");
...
</div>


@code
{
	public static foo(string s1, string s2)
	{
		return("<h4>s1</h4>
			<div>s2</div>")
	}
}

Kann mir jemand einen Tip geben?

20.03.2014 - 15:39 Uhr

Vielen Dank!! Ich habe den ganzen Vormittag damit verbracht. Im Debugger lief alles richtig, nur wenn es um was ging, war alles Mist. War total verwirrt.

20.03.2014 - 15:22 Uhr

Hallo,
wie kann ich eine Liste von Passwörtern erzeugen= Ich habe die Methode für das Erzeuegen. Aber wenn ich sie mehrmals aufrufe, erscheint immer dasselbe Passwort.
Verstehe nicht nicht so ganz. Eiegenltiuch müsste er bei jedem Schleifendurchlauf ein neues Passwort erzeugen??


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication3
{
    class Program
    {

        public static string CreateRandomPassword(int passwordLength)
        {
            string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
            char[] chars = new char[passwordLength];
            Random rd = new Random();
            
            for (int j = 0; j < passwordLength; j++)
            {
                chars[j] = allowedChars[rd.Next(0, allowedChars.Length)];
            }
            rd = null;
            return new string(chars);
        }

        static void Main(string[] args)
        {
            for (int i=0; i<20; i++)
            {
                Console.WriteLine(Program.CreateRandomPassword(10));
            }
            Console.WriteLine(Program.CreateRandomPassword(5));
        }
    }
}


29.04.2010 - 10:58 Uhr

verwendetes Datenbanksystem: Paradox 7
Hallo zusammen,
ich habe eine grosses Problem mit Paradox und C#. Ich habe eine Paradox Tabelle test.db unter C:\Dokumente und Einstellungen\a\Desktop. Das ist Paradox 7. Ich möchte gerne mit C# auf diese Tabelle schreibend zugreifen.
Wie geht das? ODBC funktiobniert nicht, weil Microsoft Paradox Tabellen bis 5.x unterstützt. Ich habe versucht mit OleDbConnection auf die die Tabelle zuzugreiefen. Der Connection-String sieht so aus:
string sConnectionString = @"Provider=MSDASQL.1;Persist Security Info=False;Mode=Write;Extended Properties='DSN=Paradox;DBQ=C:\Dokumente und Einstellungen\a\Desktop;DefaultDir=C:\Dokumente und Einstellungen\a\Desktop;DriverId=538;FIL=Paradox 7.X;MaxBufferSize=2048;PageTimeout=600;';Initial Catalog=C:\Dokumente und Einstellungen\a\Desktop;Catalog=C:\Dokumente und Einstellungen\a\Desktop;";

Leider funktioniert es nicht, weil


OleDbConnection con = new OleDbConnection();
con.ConnectionString=sConnectionString;

die zweite Zeile des o.g. Codes wirft eine Meldung aus, mit der ich nicht viel anfangen kann.

"Der OLEDB-Datenanbieter für .NET Framework (System.Data.OleDb) unterstützt keine Microsoft OLE DB-Anbieter für ODBC-Treiber (MSDASQL). Verwenden Sie den .NET Framework-Datenanbieter für ODBC (System.Data.Odbc)."

Kann mir da jemand einen Tipp geben, was ich da machen muss??

03.05.2009 - 01:12 Uhr

Hallo,
damit ich das richtig verstehe. Es wird immer das Assembly genommen, dessen Kultur mit den Assemblies aus meinem Projekt übereinstimmen?
Wenn ich z.B. ein Programm in C# schreibe und in dem Quelltext schreibe, dass er noch eine Assembly aus dem GAC laden soll, diese aber zweimal in dem GAC existiert, nur in verschiendenen Kulturversionen, dann wird immer das Assembly genommen, dessen Kultur mit Kultur aus der AssemblyInfo.cs aus meinem Projekt übereinstimmt. Ist das so richtig?

26.04.2009 - 09:07 Uhr

Hallo,
ich habe mal eine Frage zu Assemblies und dem GAC und Assemblies. Jede Assembly hat ja eine Kulturangabe. Was passiert, wenn sich zwei Assemblies nur durch ihre Kulturangaben unterscheiden. Welche Assembly wird denn übernommen? Wie wird es entschieden? Wenn z.B zwei Assemblies die Primärangabe de, Sekunderangabe keine und Primärangabe de , Sekundärangabe ch hat. Von welcher Instanz wird entschieden, welche Assembly genommen wird? Steht denn irgendwo in der Datenbank der GAC drin, in welcher Reiehenfolge man die Kulturangaben berücksichtigen soll??

25.04.2009 - 07:04 Uhr

Hallo,
ich beschäftige mich seit kurzer Zeit mit dem Konzept von .net Sprachen und bin auf das Konzept der Zwischensprache MSIL gestoßen. Meine Frage dazu: Was sind denn die Vor- und Nachteile so einer Zwischensprache?
Konkret fallen mir bei den Vorteilen folgendes ein:
Portierbarkeit, Typsicher, prozessoptimiert, plattformunabhängig
Nachteile:
Langsam, verbraucht Sehr viel Ressourcen

Gibt es weitere Vor- und Nachteile?