Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von partyboy
Thema: Mehrere Threads nacheinander Abarbeiten
Am im Forum: Rund um die Programmierung

Hallo MarsStein,

Du hattest natürlich völlig recht.
Mit mehreren Workern funktioniert es wunderbar.

Danke und Gruß

Thema: Mehrere Threads nacheinander Abarbeiten
Am im Forum: Rund um die Programmierung

Hi,

wie ich dem Beitrag Methode soll auf jeden Fall bis zuende ausgeführt werden trotz Thread.Suspend zu sehen, spiele ich mometan mit Threads rum.

Ich habe jetzt mind. 2 Stunden meine Anwendung ge-debugged und seh den Wald von lauter Bäumen nicht mehr. Also entschuldige ich mich schonmal im Voraus, falls diese Frage zu einfach ist.

Was ich möchte:
Ein Prozess soll 2 Sekunden laufen, pausiert werden und der nächste Prozess soll angeworfen werden, 2 Sekunden laufen, pausiert werden, nächster Prozess, usw.

Ich gehe dabei folgendermaßen vor (dank der Tipps aus einem anderen Beitrag):
- Prozess1 starten (als Thread)
- 2 Sekunden warten
- Prozess1 pausieren
- Wenn Prozess sicher pausiert ist, wird PauseEvent ausgelöst
- im PauseEvent starte ich dann den nächsten Prozess also: Prozess2 starten, 2 Sekunden warten, Prozess2 pausieren. --> PauseEvent wird gefeuert, gleiches Spiel mit Prozess3 usw..

Das Ganze in Code gegossen sieht so aus:


        Worker wrk = new Worker();

        private void btnStart_Click(object sender, EventArgs e)
        {            
            wrk.PauseEvent += new Worker.PauseEventHandler(wrk_PauseEvent);
            wrk.Start();
            Thread.Sleep(2000);
            wrk.Pause();
        }

        void wrk_PauseEvent(object sender, EventArgs e)
        {
            //nächsten thread aufrufen. zu testzwecken und der einfachheit halber rufe ich den selben thread nochmal auf
            wrk.Start();
            Thread.Sleep(2000);
            wrk.Pause();
        }

using System;
using System.Threading;

namespace TEST
{
    class Worker
    {
        public delegate void PauseEventHandler(object sender, EventArgs e);
        public event PauseEventHandler PauseEvent;

        private bool bPause = false;

        public void Start()
        {
            if (bPause)
            {
                Resume();
            }
            else
            {
                Thread tDoIt = new System.Threading.Thread(new System.Threading.ThreadStart(DoIt));
                tDoIt.Start();
            }
        }

        private void Resume()
        {
            bPause = false;
        }

        public void Pause()
        {
            bPause = true;
        }

        private void DoIt()
        {
            //do something
            Thread.Sleep(3000);
            CheckForPause();

            //do something
            Thread.Sleep(2000);
            CheckForPause();
        }

        private void CheckForPause()
        {
            if (bPause)
            {                
                //event irgendwie asynchron aufrufen?
                PauseEvent(this, new EventArgs());
                while (bPause)
                {
                    Thread.Sleep(100);
                }
            }
        }
    }
}

Jetzt zu meinem Problem:
Wenn das erste Mal pausiert wird, wird richtigerweise das PauseEvent gefeuert aber nachfolgender Code (die while-Schleife zum Warten) nicht ausgeführt.

Kann ich das PauseEvent irgendwie asynchron aufrufen oder ist mein Ansatz komplett falsch gedacht?

Wie löse ich das Problem am Besten?

Thema: Methode soll auf jeden Fall bis zuende ausgeführt werden trotz Thread.Suspend
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen Dank für Eure Unterstützung.
Ich habs jetzt so gemacht, wie von JAck30lena beschrieben.

Von außerhalb der Klasse wird ein Pause-Flag gesetzt. Nach jeder zusammenhängenden Befehlsreihe wird das Pause-Flag geprüft. Wenn true, dann wird der Thread schlafen gelegt und vorher mittels event an die aufrufende Klasse mitgeteilt, dass der Thread nun schläft.

Thema: Methode soll auf jeden Fall bis zuende ausgeführt werden trotz Thread.Suspend
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich habe eine Methode (DoWork) die in einem Thread läuft. DoWork führt viele Befehle hintereinander aus. Bestimmte Befehle gehören aber zusammen und müssen immer komplett ausgeführt werden.
Nun möchte ich den Thread aber pausieren mittels Thread.Suspend.
Wie bekomme ich es hin, dass bestimmte Befehlsfolgen ununterbrechbar sind? Der Thread soll erst schlafen gelegt werden, wenn eine Befehlsreihe (hier 'step') vollständig durchgeführt wurde.


System.Threading.Thread tWorker;
private void DoWork()
{
	//step1
	Delay(3000);
	MessageBox.Show("step1 wurde vollständig ausgeführt.");
	//step2
	Delay(3000);
	MessageBox.Show("step2 wurde vollständig ausgeführt.");
	//step3
	Delay(3000);
	MessageBox.Show("step3 wurde vollständig ausgeführt.");
}

private void btnStart_Click(System.Object sender, System.EventArgs e)
{
	tWorker = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
	tWorker.Start();
}

private void btnPause_Click(System.Object sender, System.EventArgs e)
{
	tWorker.Suspend();
}


Ich dachte erst, der lock-Befehl würde mir da weiterhelfen aber er scheint in meinem Fall keine Auswirkungen zu haben. Die MessageBox erscheint nicht, nachdem ich den Thread pausiere.

object myLock = new object();
private void DoWork()
{
	lock ((myLock)) {
		//step1
		Delay(3000);
		MessageBox.Show("step1 wurde vollständig ausgeführt.");
	}
	lock ((myLock)) {
		//step2
		Delay(3000);
		MessageBox.Show("step2 wurde vollständig ausgeführt.");
	}
	lock ((myLock)) {
		//step3
		Delay(3000);
		MessageBox.Show("step3 wurde vollständig ausgeführt.");
	}
}

Wie macht man es richtig? Muss ich die Pause-Funktionalität selbst programmieren und dafür sorgen, dass einige Befehlsreihen atomar bleiben? Wie gehe ich da am Besten ran?

Viele Dank

Thema: Text direkt in ein Spiel schreiben (Statistik einblenden)
Am im Forum: Grafik und Sound

Hi,

ich versuche momentan einen Text direkt in ein Spiel (Vollbildmodus) zu schreiben, um eine Statisktik einzublenden. Das Spiel setzt DirectX voraus und ist nicht von mir.

Meine kläglichen versuche waren folgende:
(Text auf Desktop schreiben)


       [DllImport("User32.dll")]

        public static extern IntPtr GetDC(IntPtr hwnd);

        [DllImport("User32.dll")]

        public static extern void ReleaseDC(IntPtr dc);


            IntPtr myDC = GetDC(IntPtr.Zero);
            Graphics g = Graphics.FromHdc(myDC);
            SolidBrush b = new SolidBrush(Color.Red);
            g.DrawString("hello world", new Font("Arial", 26), b, new PointF(20, 20));            
            g.Dispose();
            ReleaseDC(myDC);

Damit lässt sich der Text erfolgreich auf den Desktop schreiben. Wenn ich jetzt aber statt IntPtr.Zero, das Handle des Spiels übergebe, passiert leider gar nichts.

Ich vermute fast, dass ich mit diesen mitteln bei Spielen keine Chance habe. Muss ich dafür selbst das DirectX-SDK nutzen oder wie komme ich am Besten zum Ziel?

Thema: L2 Cache des Prozessors auslesen
Am im Forum: Rund um die Programmierung

Hi,

haste den Thread grade parat oder irgendwelche Anhaltspunkte, wie ich ihn finden kann? Die Suche nach "CPUID" im Forum bringt keine Treffer.

partyboy

Thema: L2 Cache des Prozessors auslesen
Am im Forum: Rund um die Programmierung

Es scheint ein bekanntes Problem zu sein und hier gibts ne Lösung(?) http://support.microsoft.com/kb/894569

Zitat
Win32 CacheMemory WMI Klasse verwenden, um die MaxCacheSize Eigenschaft zurückzugeben

Weiß jemand was damit anzufangen?

partyboy

Thema: L2 Cache des Prozessors auslesen
Am im Forum: Rund um die Programmierung

Hi,

ich versuche mich daran, den L2 Cache meines Prozessors auszulesen.

Dabei verwende ich folgenden Code:


ManagementObject mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");

    try
    {        
        MessageBox.Show(mo["L2CacheSize"].ToString());
    }
    catch {}
    mo.Dispose();

Leider wird mir immer "0" zurückgeliefert. Der richtige Prozessor ists auf jeden Fall, ich kann erfolgreich die Taktfrequenz mittels WMI auslesen.

Was mache ich falsch?

partyboy

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Dankeschön, hab nur eine Seite gecastet (geunboxed?). Jetzt kommt auf beiden Seiten -263192204 raus und der Vergleich klappt.

partyboy

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hm, ein Problem habe ich noch. Wie bekomme ich den Wert jetzt wieder ausgelesen?

rkRun.GetValue("Wert") liefert mir -263192204 zurück, obowohl 4031775092 im Wert drinsteht.

Danke,
partyboy

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich weiß, aber ich habs wohl falsch angewendet

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat
Original von Kabelsalat
.Net verhällt sich schon richtig: System.UInt32 ist nicht CLS-Konform und daher wird ein System.Int32-Wert erwartet. Beides sind 32bit Werte und sie können daher exakt die selben (Bit-)Werte aufnehmen - der Unterschied liegt nur in der Interpretation eben dieser. Ein DWORD ist nichts anders als ein unsigned int, was dem zu Folge auch bedeutet, dass z.B. -1 auch als UInt32.MaxValue interpretiert wird. Die passenden Integer-Werte erhälst du mittels unchecked((int)4031775092) [natürlich mit entsprechendem Wert].

you rock!!

Besten Dank, funktioniert wunderbar.

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

leider klappts nicht so einfach. Die Zahl passt nicht in eine int-Variable, es muss uint sein.
uint wird nicht von Microsoft.Win32.RegistryValueKind.DWord unterstützt.

Ich machs über die WinAPI.

partyboy

Thema: Bug im Framework - Keine Zahlen größer als int als Dword in Registry speicherbar
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich wollte die Zahl 4031775092 als Dword in der Registry speichern und habs einfach nicht hinbekommen. Dann lese ich das hier: http://www.pcreview.co.uk/forums/thread-2422811.php

Sehr ärgerlich. Gibts ne Möglichkeit die Zahl trotzdem als dword in die Registry zu kriegen? Muss ich es per API-Call erledigen (hoffentlich gehts damit)?

partyboy

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

Nein, das war nur eine Lüge, um schneller an Antworten zu kommen 8o

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

Sorry Leute, ich bin ein Depp X(

Eine andere Funktion hat das Problem ausgelöst, nicht die Regsitry-Schreib-Funktion.

Ich hab ein Testprogramm erstellt, das wirklich nur den Beispielcode ausführt, den ich gepostet hatte und jetzt gehts.

Danke Leute

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

Hi,

das geht leider nicht, ich muss registry-Einstellungen eines Programmes ändern.

partyboy

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

arg, hilfe. Wenn ich nicht bald eine Lösung für dieses Problem habe, werde ich von meinem Chef ausgepeitscht. X(

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

Hi,

das hab ich mir auch schon gedacht, aber ich schreibe nicht in localmachine. Wenn ich es wollte, würde Windows sicherlich diesen "Das Programm xyz will..."-Dialog bringen.

Man, das nervt echt. Wäre super, wenn jemand ne Lösung für das Problem hat.

edit: Es hilft auch nicht, wenn ich mein Programm als Administrator ausführe, mittels rechte Maustaste aufs Programm-Icons "Als Adminstrator ausführen".

partyboy

Thema: Registry-Zugriff unter Windows-Vista
Am im Forum: Rund um die Programmierung

Hi,

hat schomal jemand von Euch unter Windows Vista auf die Registry zugegriffen (lesen/schreiben)?

Folgendermaßen schreibe ich in die Registry:


            RegistryKey rkHKLM = Registry.CurrentUser;
            RegistryKey rkRun = rkHKLM.OpenSubKey(@"Software\Microsoft\DWM", true);
            if (rkRun == null)
            {
                rkRun = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\DWM");
            }
            rkRun.SetValue("test", 1);
            rkRun.Close();
            rkHKLM.Close();

Unter Windows Xp gibts keinerlei Probleme und unter Windows Vista auch nicht, solange ich mein Programm aus der Entwicklungsumgebung starte.

Wenn ich aber die kompilierte exe starte und die Funktion ausführe, bekekomme ich immer die Fehlermeldung "stopped working" von Windows.

Kennt jemand das Verhalten und weiß Abhilfe?

partyboy

Thema: Malwieder Website ausfüllen per httpWebRequest
Am im Forum: Web-Technologien

könnt ihr mal sagen, wie ihr den code angepasst habt?

ich kann auch nicht ganz deuten obs bei euch jetzt geklappt hat oder nicht.

Thema: Malwieder Website ausfüllen per httpWebRequest
Am im Forum: Web-Technologien

Hi,

ich möchte gerne einen upload über eine seite durchführen per httpwebrequest.

Mein 1. Versuch (code ausm forum zusammenkopiert):


//###########
//einloggen
//###########

            string url = string.Format("http://www.die_website.de/user/login.php");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8";
            request.KeepAlive = true;
            request.ContentType = @"application/x-www-form-urlencoded";
            request.Referer = string.Format("http://www.die_website.de/user/login.php");
            request.CookieContainer = new CookieContainer();


            // Send the log-in data
            string postData = string.Format("user=test&pass=test&submit=Anmelden");
            request.Method = "POST";
            byte[] postBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
            request.ContentLength = postBuffer.Length;
            Stream postDataStream = request.GetRequestStream();
            postDataStream.Write(postBuffer, 0, postBuffer.Length);
            postDataStream.Close();

            // Get the response
            HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();

//###########
//datei hochladen
//###########

            url = string.Format("http://www.die_website.de/upload.php");
            request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8";
            request.KeepAlive = true;
            request.ContentType = @"application/x-www-form-urlencoded";
            request.Referer = string.Format("http://www.die_website.de/upload.php");

            // Send the log-in data
            postData = string.Format("datei=C:/test.zip&katid=0&submit=Hochladen");
            request.Method = "POST";
            postBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
            request.ContentLength = postBuffer.Length;
            postDataStream = request.GetRequestStream();
            postDataStream.Write(postBuffer, 0, postBuffer.Length);
            postDataStream.Close();

            // Get the response
            myResponse = (HttpWebResponse)request.GetResponse();

Es klappt leider nicht. Ich weiß auch nicht, was httpWebResponse zurückliefert, wenns geklappt haben sollte.

vielen dank für eure hilfe!

Thema: Verknüpfung (Shortcut) auf dem Desktop erstellen
Am im Forum: GUI: Windows-Forms

Klar, dass ich da nicht selbst drauf gekommen bin...

Besten Danke, blackcoin.

@Lord Hessia: Dämlicher Kommentar. Du kennst den Zusammenhang doch überhaupt nicht. Außerdem würde ich bestimmt keine Verknüpfung erstellen, wenn ich den Benutzer mit meinem Programm ausloggen möchte...

partyboy

Thema: Verknüpfung (Shortcut) auf dem Desktop erstellen
Am im Forum: GUI: Windows-Forms

Hi,

ich habe einen Beispielquellcode gefunden, wie man eine Verknüpfung auf dem Desktop platziert.
Hier zu finden: Google-Groups-Link

Ich möchte aber gerne eine Verknüpfung erstellen, mit der ich den Windows-Benutzer ausloggen kann. Siehe hier: http://www.win-tweaks.de/windows_xp/sicherheit/windows_per_verknupfung_sperren.html

Wenn ich folgendes schreibe, bekomme ich nur einen Dialog, als welchen Benutzer ich das Programm ausführen möchte.


                IWshShell_Class shell = new IWshShell_ClassClass();
                // Define the shortcut file
                IWshShortcut_Class shortcut = shell.CreateShortcut("Lock Workstation" + ".lnk") as IWshShortcut_Class;
                // Set all its properties
                shortcut.Description = "Smart sample of creating shell shortcut";
                
                shortcut.TargetPath = @"C:\Windows\system32\rundll32.exe user32.dll, LockWorkStation";
                shortcut.Arguments = "";
               // shortcut.IconLocation = app + ",0";
                // Save it
                shortcut.Save();


Außerdem wüsste ich gerne, wie ich dem Shortcut ein Icon verpassen kann aus dem shel32.dll-iconset.

Hat jemand Rat?
partyboy

Thema: Suche Freeware Obfuscator
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich muss diesen Link wieder aus der Versenkung holen.
Der Aspose-Obfuscator funktioniert mit .net 2.0 nicht mehr und Aspose arbeitet nicht mehr an diesem Projekt.

Hat jemand kostenlose alternativen für .net 2.0 C#-Obfuscatoren?

Ich benutze die Visual Studio 2005 C# Express.

partyboy

Thema: Per Drag&Drop Texte an bestimmte Stellen einer Textbox ziehen
Am im Forum: GUI: Windows-Forms

Hi,

ich möchte gerne in eine Textbox (multiline=true) Strings ziehen können und zwar an die Position über dem Mauszeiger, bzw. die Cursorposition.

Normales Drag&Drop ist kein Problem, nur im DragDrop-Event der Textbox folgenden Code:

textBox1.Text += e.Data.GetData(DataFormats.Text).ToString();

Dadurch wird natürlich der "gedroppte" Text an den bestehenden Text der textBox gehängt.

Ich möchte aber, dass der Text dorthin gedroppt wird, wo sich der Mauszeiger befindet.

Wie kann ich das realisieren?

EDIT: So kann ich den Text dahin droppen, wo sich der Cursor zuletzt befunden hat:
textBox1.SelectedText = e.Data.GetData(DataFormats.Text).ToString();

Ich möchte aber gerne, dass beim Draggen der Cursor in der TextBox sichtbar ist und mit der Maus mitwandert.

partyboy

Thema: Combobox-Spalte im DataGridView --> Man muss zweimal klicken um die Combobox zu öffnen
Am im Forum: GUI: Windows-Forms

Zitat
Original von inTrance
http://fheinemann.de/archives/9-ComboBoxes-in-the-DataGridView-control.html

Funktioniert super!

Schade, dass sich das DataGridView nicht von Haus aus so verhält.

partyboy

Thema: Combobox-Spalte im DataGridView --> Man muss zweimal klicken um die Combobox zu öffnen
Am im Forum: GUI: Windows-Forms

Hi,

ich habe in einem DataGridView eine Spalte mit Comboboxes.
Um eine Combobox aufzuklappen, muss man zweimal auf die Combobox klicken, was mich ziemlich nervt.
Ich denke, dass mit dem ersten Klick die Zeile markiert wird und mit dem zweiten Klick wird erst die Combobox angesprochen (reine Theorie!).

Wie kann ich es bewerkstelligen, dass nur ein Klick notwenig ist, um die Combobox aufzuklappen?

partyboy

Thema: Hashtable - An den Key kommen, wenn Value bekannt ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi herbivore,

ich nutze .net 2.0. Ich habe jetzt ein Dictionary erstellt und gefüllt.

Folgendermaßen hole ich mir den Key eines Values:


                foreach (KeyValuePair<string, string> kvp in meinDictionary)
                {                    
                    if (meinString == kvp.Value)
                    {
                        meinString = kvp.Key;
                        break;
                    }
                }

Geht das nicht eleganter? Ich habe gehofft, dass es eine Funktion gibt, bei der ich einfach den Value angebe und mir wird der Key zurückgeliefert.

partyboy

Thema: Hashtable - An den Key kommen, wenn Value bekannt ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

ich habe eine Hashtable mit Zuordnungen. Über den Key rufe ich dessen Value ab, was auch super klappt.

Jetzt möchte ich aber über den Value an den Key ran. In meinem speziellen Fall sind die Values ebenso einmalig, wie die Keys.

Wie kann ich das realisieren, oder ist eine Hashtable die falsche Wahl für mein Vorhaben?

partyboy