Laden...
M
Matrix-NTN myCSharp.de - Member
Energieelektroniker Sigmaringen Dabei seit 11.03.2005 267 Beiträge
Benutzerbeschreibung

Forenbeiträge von Matrix-NTN Ingesamt 267 Beiträge

28.09.2012 - 11:01 Uhr

Er könnte es aber als alternative bei dem oben genannten Beispiel mit der unsichtbaren Form verwenden.
Bei mir hat es mittels override WndProc schon öffters zu Problemen geführt...

28.09.2012 - 10:51 Uhr

Hallo retnug,

du könntest auch mittels dem Parameter "FormClosingEventArgs e" des FormClosing Events über das Propertie CloseReason herausfinden, was der Grund für das Beenden der Form ist.

CloseReason-Enumeration

Hierbei gibt es auch CloseReason.WindowsShutDown oder auch UserClosing. Somit kannst du unterscheiden, ob ein User das Programm beenden möchte oder ob Windows sich herunterfährt.
Mittels e.Cancel = true könntest du dann das Beenden deines Programmes ggf. auch unterbinden.

Grüße
Matrix-NTN

14.05.2009 - 12:07 Uhr

Sorry, habe eure beiträge erst jetzt gelsene.

Danke für die Tips...
Habe die Datei mit der Dispose funktion schlicht und ergreifend übersehen.

14.05.2009 - 12:05 Uhr

Soweit so gut...
Von dem Control gibt es eine Datei namens Controlname.Designer.cs
In dieser gibt es eine Dispose Funktion von welcher ich meinen Thread stoppen kann...

Grüße
Matrix

14.05.2009 - 11:26 Uhr

Hallo zusammen,

ich habe mir ein UserControll erstellt.
In diesem Controll starte ich einen Thread, welcher kontinuierlich irgendwelche arbeitet durchführt (Endlosschleife).

Wenn ich nun mein Windows-Formular, in welchem das Control sich befinden, schließe, dan beendet sich das Programm nicht komplett, da der Thread des Controls noch läuft.
Wie ich leider feststellen musste, besitzt das UserControl selbst kein Events OnClose oder OnClosing wie das Windows-Formular.

Eine möglichkeit wäre in dem UserControl eine Funktion einzubauen, welche von dem Windows-Formular bei Dispose oder OnClosing aufgerufen wird.
Somit muss ich aber immer daran denken, wenn ich dieses Control verwende...

Gibt es noch eine andere möglichkeit, dies Control-seitig automatisch zu lösen?

Danke im voraus.

Grüße
Matrix

22.01.2009 - 07:10 Uhr

Hallo zusammen,

dank des .Net Quellcodes, konnte ich mich durch den Framework Code debuggen.

Hier erst mal der Code:


Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(creationTimeUtc.ToFileTimeUtc());
                bool r = Win32Native.SetFileTime(handle, &fileTime, null, null);
                if (!r)
                { 
                     int errorCode = Marshal.GetLastWin32Error();
                    __Error.WinIOError(errorCode, path); 
                }
 

Dies ist ein ausschnitt aus der Funktion SetCreationTimeUtc.
Leider kann ich beim debuggen die Werte der Variablen nicht anzeigen lassen 😦.
Aber beim debuggen ist mir aufgefallen, dass der Rückgabewert von SetFileTime false ist, da er in die if(!r) Schleife geht.
Somit ist klar er hat einen Fehhler aber was für einen konnte ich leider noch nicht herausfinen.

Grüße
Matrix

21.01.2009 - 20:04 Uhr

Hallo herbivore,

wenn ich einen Beitrag schreibe erscheint dieser normal gleich bei "neue Beiträge".
Bei diesem Thread wurde er aber direkt(!) nach dem Antworten nicht bei "neue Beiträge angezeigt".

Werde es mir aber für die zukunft merken und beachten.

@Thomas Würst:
Das werde ich morgen mal testen.
Danke

Grüße
Matrix

21.01.2009 - 14:18 Uhr

[EDIT=herbivore]Threads zusammengefügt[/EDIT]

Hallo Zusammen,

ich habe über die Suche folgenden Thread gefunden:
FileInfo.LastWriteTime-Phänomen

Da ich gerade dieses Problem habe, habe ich zu diesem "alten Thread" einen Eintrag hinzugeschrieben.
Aber leider tauchte dieser nicht in der "neue Beiträge Liste" auf.
Deshalb frage ich hier nun nochmals in die Runde, ob dieses Problem bekannt ist.

Nochmals kurz die Fakten:

Wenn ich eine Datei kopiere und anschließend mit folgenden befehlen die Zeiten übernehmen will:


Datei.LastAccessTime = Source.LastAccessTime;
Datei.LastWriteTime = Source.LastWriteTime;
Datei.CreationTime = Source.CreationTime;

Die Zeiten der Orginal und Kopierten Datei sehen dann wie folgt aus:

               Orginal                           Kopiert
LastAccess     21.01.2009 12:59:07               21.01.2009 00:00:00
LastWrite      12.01.2009 08:31:52               12.01.2009 08:31:54
Creation       09.01.2009 12:41:50               09.01.2009 12:41:50

Hierbei sieht man schön das die CreationTime korrekt ist.
Dagegen aber bei LastAccessTime die Uhrzeit fehlt und bei LastWriteTime 2 Sekunden zu viel sind.

Ist jemandem diese Problem bekannt?
Oder habe ich hier irgendwo ein denkfehler?

Grüße und danke im voraus
Matrix

12.01.2009 - 14:24 Uhr

Hallo zusammen,

ich habe gerade das selber Problem:

mein Code ist folgender:


FileInfo Source = new FileInfo(SourcePfad);
Source.CopyTo(Pfad, true);
FileInfo test = new FileInfo(Pfad);
test.LastAccessTime = Source.LastAccessTime;
test.LastWriteTime = Source.LastWriteTime;
test.CreationTime = Source.CreationTime;
test.Refresh();

LastAccessTime unterscheidet sich nur in der Uhrzeit diese steht bei "test" Datei auf 00:00:00.
LastWriteTime ist bei der "test" Datei die Uhrzeit 2 sekunden weiter.
Die CreationTime stimmt bei mir genau (auch die Ticks) überein.

Gibt es hierzu weitere erkentnisse?

Grüße
Matrix

08.10.2008 - 06:32 Uhr

Hi,

wenn ich deinen ControllTester ausführe, bekomme ich folgende Exception:
Message: intervalmodulo of Start-End-Timespan must retrive a zero. check start, endtime and interval
StackTrace:bei ProcessWatcher.Controls.DateChart.SetTimeSettings(DateTime newStartDisplayTime, DateTime newEndDisplayTime, DateChartInterval newInterval, Boolean check) in C:\timechart\Controls\DateChart.cs:Zeile 1429.
TargetSite:Void SetTimeSettings(System.DateTime, System.DateTime, Controls.DateChartInterval, Boolean)

Ich habe am Projekt keine Modifikationen vorgenommen...
Wenn ich dann diese Funktion in einen Try-Catch block setze und im Catch block die Exception ignoriere, kommt die Form hoch und es funktioniert meines erachtens alles...

Grüße
Matrix

29.09.2008 - 09:38 Uhr

Hi,

das hört sich soweit sehr gut an.
Freue mich schon auf die neue Version.

Grüße
Matrix

29.09.2008 - 07:25 Uhr

Hi,

also das Programm finde ich echt toll.

Hätte aber noch folgende Verbesserungsvorschläge:

  • Der "Perform Screenshot!" Menüpunkt sollte am besten auch per F-Taste aufrufbar sein.
  • Fensterauswahl (das man einfach ein fenster auswählt und das Rechteck drumherum gezogen wird)
  • das FadeIn nach dem Druck auf den "Perform Screenshot" Menüpunkt ist extrem träge. Das Sollte schneller gehen. Zudem auch die Auswahl mit der Maus das läuft auch sehr träge wenn man das rechteck zieht.

Es gibt auch ein komerzielles Programm welches diese Aufgabe übernimmt "Hardcopy"
Bei dem programm kann ich verschiedene Tastatur Tasten definieren mit einer Aktion:
z.B:
Pause Taste = Fenster auswahl
Druck Taster = manuelle Auswahl mittels Rechteck
Rollen Taste = kpl. Screenshot.

Wenn dein Programm solch eine funktionalität besitzen würde wäre es echt genial.

Aber ansonsten spitzen arbeit 🙂

Grüße
Matrix

16.09.2008 - 11:36 Uhr

Hi,

also erstmals dickes Lob... für 15 Stunden finde ich das eine gelungene Komponente...

Ich hätte aber noch einen Verbesserungsvorschlag:
Wenn es möglich wäre, dass man in einer Zeile mehre Zeiten angeben kann und diese unterschiedlich betittlen kann.
Also so ala Terminkalender

Montag: 10-11 Tuwas 14-15 Was anderes
Dienstag: 9-10 Nochwasanderes usw...

Dazu wäre es auch noch toll, wenn in dem Zeitbalken (sofern er lang genug ist) ein teil des Textes visualisiert wird. So das bei Montag im ersten Zeitbalken "Tuwas" und im zweiten "Was anderes" steht.

Sowas wäre hier echt nicht schlecht.
Wäre echt super wenn du das einbauen würdest.

Ansonsten weiter so...

Grüße
Matrix

18.08.2008 - 19:41 Uhr

Hi,

also ich finde den Simulator echt Spitze...
Nachdem ich den runtergeladen habe, dachte ich ohje da spiel ich höchstens 2 mal...
Aber jedesmal als ich "Game Over" war sagt ich ach noch einmal und noch einaml usw....
Glaub nach 30 -40 runden habe ich dan vor müdigkeit aufgehört... Weiter so.

Hier mal die Bugs welche ich gefunden habe:

  • Wenn man im Pause-Modus ist und auf das "X" drück, hängt sich das Game kpl. auf

Hier meine Verbesserungsvorschläge:

  • Die Trackbars von den Pumpen und den Steuerstäben sollten ausgewechsel werden... Wenn man jeweils einfach in die mitte klickt (mehrmals) dann springt die Position der Trackbar wie wild umher nur nicht dahin wo man klickt.
    Bei den Pumpen sprint er immer von 0 auf 100 und zurück.
    Und es geht mir etwas auf die nerfen immer genau zielen zu müssen, dass ich den Scrooler erwische...
  • Wenn die Pumpe defekt ist reicht es eigentlich wenn darunter "Fehler" rot blinkt. Die Pumpe selbst brauch dann eigentlich nicht auch noch rot zu Blinken. Es würde reichen wenn diese einfach stehen bleibt.
  • Die Animationen der Pumpen könnten etwas flüssiger ablaufen würde das Spiel vom erscheinungsbild her etwas schneller machen (sieht sonst so träge aus...).
  • Bei den Pumpen könnte man doch eigentlich auch den Ein/Aus Schalter weglassen und einfach sagen, wenn die Pumpe auf 0% ist ist Sie aus oder nicht? Würde etwas an klickarbeit ersparen.
  • Die "Besonderen Vorkomnisse" sollten etwas besser hervorgehoben werden. Mir ist es nun schon mehrmals passiert, dass ich das erst gesehen habe als noch ein paar sekunden überig waren...
  • Dann wie schon offt hier besprochen fände ich es auch besser, wenn die Übersicht irgendwie auch auf der Hauptoberflöche untergebracht wird (auch wenn etwas kleiner)
  • Wenn irgendwo ein fehler aufgetreten ist, wäre es doch eigentlich besser, wenn nicht überall ein Button wäre "Techniker zu Pumpe 1 rufen" sondern wenn es ein "Techniker Fenster" geben würde, in welcher in einer Liste alle Fehler angezeigt werden würden. Dort könnte dann mittels Drag&Drop oder Buttons die Reihenfolge einstellen. Zudem könnte der Techniker nach behebn des ersten fehlers sofort zum nächsten gehen (sofern einer vorhanden ist).

Sodele das wars mal vorerst...
Ich hoffe habe keine Vorschläge doppelt gepostet welche schon im forum waren ansonsten entschuldigt bitte...

Zudem hätte ich die Frage ob du denn Quellcode veröffentlichen könntest?

Ansonsten weiterso...

Grüße
Matrix

04.07.2008 - 08:22 Uhr

Ich möchte es nicht direkt löschen, sondern nur alle Values auf String.Empty setzen.

04.07.2008 - 07:57 Uhr

Ok das funktioniert...
Aber hier wird auch eine neue Liste angelegt.
Um soetwas möchte ich wenn möglich herumkommen...

Soferns da noch so etwas gibt...

04.07.2008 - 07:20 Uhr

Hallo zusammen,

ich hänge grad irgendwie an einem kleinen Problem rum....

hier erst mal der Code:


Dictionary<TestEnum,String> dict = new Dictionary<TestEnum,String>()
public enum TestEnum
{
        Test1,
        Test2,
        Test3
}

public void AllesLoeschen()
{
      foreach (TestEnum key in dict.Keys)
      {
            LoescheWert(key);
      }
}

public void LoescheWert(TestEnum key)
{
      dict[key] = String.Empty;
}


Da ich mit einer foreach Schleife auf die Tabelle losgehe und dann in der schleife die Tabelel ändere bekomme ich immer eine Exception:
"Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden"

So das dieser Code nicht funktioniert ist mir klar...

Das einfachste wäre nun mittels einer for schleife das ganze zu machen.
Leider habe ich noch keinen weg gefunden wie ich mittels for schleife auf den Key zugreifen kann.
Aktuell habe ich zwar ne lösung:


public void AllesLoeschen()
{
      TestEnum[] testarray = new TestEnum[dict.Count];
      dict.Keys.CopyTo(testarray,0);
      foreach (TestEnum key in testarray)
      {
            LoescheWert(key);
      }
}

Da aber diese funktion relativ sehr oft aufgerufen wird, möchte ich das gerne so Resourcenfreundlich wie nur möglich machen.
Habt ihr ne idee wie das gehen könnte?

Danke im voraus
Grüße
Matrix

10.06.2008 - 15:14 Uhr

Wenn ich nun sage Timer.Stop und er ruft mir das Elapsed nochmals auf sollte dass aber dennoch nicht zu einer NullReferenceException führen...
Wie gesgt die Methode IOBehandlung() macht ja nicht die Probleme sondern der Timer bzw. die Funktion Timer.Start

10.06.2008 - 08:42 Uhr

Werde mir das nachher gleich mal durchlesen...
Aber der Timer ist denke ich nicht hin... da wie ich oben schon sagte, wenn ich auf "Bearbeiten aktiviere" klicke, um in den Debugger zu kommen, dann ist der Timer nicht hin und mit einem Tastendruck auf F10 läuft es weiter...

10.06.2008 - 08:25 Uhr

Hier die Zeile:
452: tPolling.Start();

10.06.2008 - 08:11 Uhr

@talla
Also die IOBehandlung ist soweit schon ThreadSafe (hoffe das zumindest)
Aber desbezüglich hatte ich noch nie Probleme.
Wenn nun wie du sagtest die ElapsedEreignisse gleichzeitig kommen würden sollte das aber nicht zu soeiner Ausnahme führe. Das problem liegt ja laut StackTrace am Timer selbst nicht an der IOBehandlung

10.06.2008 - 08:07 Uhr

Also es ist eine Fensteranwendung, aber der Timer läuft im Background...

@talla:
Bezuüglich dem GC kann ich nur folgendes sagen:
Wenn die Meldung im Visual Studio angezeigt wird, kann ich auf einen Link "Bearbeiten aktiuvieren" klicken. Dann springe ich direkt in den Debugger.
Wenn ich mir dann den tPolling Timer anschaue ist der nicht NULL und somit denke ich nicht, dass der GC den schon entsorgt hat.

10.06.2008 - 07:52 Uhr

in welchem Kontext wird der Timer verwendet?

Wie oben geschrieben System.Timers.Timer

10.06.2008 - 06:54 Uhr

Hallo zusammen,

ich habe bei mri eine kleine Klasse mit einem System.Timers.Timer.
Der Timer hat einen intervall von 10ms.
Wenn das Elapsed Ereigniss auftritt wird der Timer deaktiviert mittels Timer.Stop dann werden diverse IO Behandlungen ausgeführt und anschließend wird er im finaly block wieder gestartet mittels Timer.Start.

Das funktioniert soweit alles einwandfrei bis auf "ab und zu" meistens wenn ich das Programm Nachts durchlaufen lasse (ohne das es was zu tun hat) kommt eine NullReferenceException und es wird die Teile mit dem Timer.Start markiert.

Message: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
StackTrace " bei System.Timers.Timer.UpdateTimer()\r\n bei System.Timers.Timer.set_Enabled(Boolean value)\r\n bei System.Timers.Timer.Start()\r\n bei Helper.Base.tPolling_Elapsed(Object sender, ElapsedEventArgs e) in C:...\Base.cs:Zeile 452.\r\n bei System.Timers.ElapsedEventHandler.Invoke(Object sender, ElapsedEventArgs e)\r\n bei System.Timers.Timer.MyTimerCallback(Object state)"

Hat jemand evtl. eine Ahnung an was das liegen könnte?
Sind die 10ms evtl. zu schnell für den Timer oder so?

achso hier noch der Code:


private void tPolling_Elapsed(object sender, ElapsedEventArgs e)
{
    try
    {
        tPolling.Stop();
        IOBehandlung();
    }
    catch (Exception ex)
    {
        Log(ex);
    }
    finally
    {
        tPolling.Start();
    }
}

Danke im voraus.

Grüße
Matrix-NTN

27.05.2008 - 11:50 Uhr

Was ist aber wenn ich nun ein STX oder sowas übergeben möchte?
Das kann ich nicht einfach so übergeben

Kann ich dem dann nicht sagen er soll das anders interpretieren bzw. umwandeln?

27.05.2008 - 11:35 Uhr

Hallo zusammen,

wenn ich sage
String a = "\x41"
Dann ist im String a ein 'A'.

Wenn ich nun ein Programm mittels Argumenten aufrufe funktioniert das nicht so wie ich es will

Als argumente gebe ich an \x41
In dem args[0] steht dann aber "\x41"

Was kann ich dagegen tun?
Hat jemand einen rat?
Danke im voraus

Grüße
Matrix

03.04.2008 - 10:05 Uhr

Ein anwendungswrapper als Service ist naklar auch ne gute IDEE....
Werde ich mal Probieren.

Mercy @ all

03.04.2008 - 10:02 Uhr

So auf die Art:

Möchten Sie das Programm wirklich Beenden?
Ja
throw new Exceptioen("Programm beenden");

🙂

03.04.2008 - 09:26 Uhr

@Khalid:
Also wenn ich das Programm aktuell als Service laufen lasse, funktioniert soweit alles.

Also Tray funktioniert leider nicht, das Programm laufen soll, auch wenn kein User angemeldet ist. Und das funktioniert eben nur als Service.
Deshalb muss/will ich es so machen.

@Andreas.May:
Nein eine oberfläche benötige ich eigentlich nicht...
Es geht mir mehr darum, dass wenn z.B. mein Programm eine Exception hat oder aus irgendeinem grund nicht starten konnte, dass der Service dann auch beendet wird.
SOmit kann ich prüfen, ob der Service läuft oder nicht.

03.04.2008 - 08:40 Uhr

Guten morgen zusammen,

ich habe gerade versuche gemacht, ein GUI Programm als Service laufen zu lassen.
Das Funktioniert z.B. auch mit dem Notepad... 🙂
Ich nutze dafür das Programm srvany.exe.

Wenn ich in meinem Dienst die Option "Datenaustausch mit dem Deksktop zulassen" aktiviere, dann kommt auch die GUI des Notepads.
Echt toll.

Aber mein Problem ist, wenn ich nun das Notepad mittel Datei -> Beenden beende.
Dann bleibt der Service auf "Gestartet".
Bei meiner Software (welche ich als Service laufen lassen möchte) ist das genau gleich.

Klar eine möglichkeit wäre die Software im Visual Studio als Service zu erstelle aber da das programm sehr komplex ist wäre es so etwas einfacher.

Nun meine Frage hat damit jemand schon erfahrungen oder weiß jemand wie ich das Einstellen / Programmieren kann, damit auch der Service beendet wird.
Danke im vorraus...

Grüße
Matrix

04.03.2008 - 22:12 Uhr

Das Problem dabei ist halt, dass automatisch sehr viel geändert wird (u.u 20-40 änderungen pro 10 sek)....

Die Eventreihenfolge ist bei einer Manuellen änderung:

  1. ItemCheck
  2. SelectedValueChanged
  3. SelectedIndexChanged

Dabei kommt aber noch das Problem dazu, dass wenn ich manuell nur ein anderes Item selektiere (nicht ändere) dann werden events 2 und 3 ausgelöst.
Deshalb würde es nichts bringen mir den wert bzw. Index bei ItemCheck zu merken und dann in SelectedValueChanged oder SelectedIndexChanged dementsprechend weiter zu verarbeiten.

Mich interessiert eben nur die manuelle änderung da muss ich den neuen Wert und den Index wissen,

So ein Event fehlt in der Listbox wirklich....

04.03.2008 - 21:38 Uhr

Hallo,

mal ne frage...
Wenn ich eine CheckedListbox habe.
Auf der Oberfläche kann ich die Items Checken/Unchecken.
So nun kann ich aber auch über ein Button (bzw. Thread etc. is ja egal) diverse Items Checken/Uncheken lassen (mittels checkdelistbox.SetItemsChecked(1,true))

Nun möchte ich aber zwei verschiedene Aktionen ausführen:

  1. Benutzer hat von hand in der Checkedlistbox einen Eintrag geändert
  2. Es wurde automatich (Thread) ein Eintrag geändert.

Wie könnte ich sowas bewerkstelligen.
Es gibt das Event SelectedValueChanged dieses wird nur aufgerufen, wenn ein Benutzer von hand einen Eintrag ändert. So das wäre Punkt 1.
Dann gibt es noch das Event ItemCheck dies wird aber jeweils bei Punkt 1 und 2 aufgerufen.
Somit weis ich nun nicht, ob es manuel oder automatisch geändert wurde.

Hat einer ne Idee?
Das sollte keine Huckepacklösung werden sondern sehr sicher laufen....

04.03.2008 - 13:31 Uhr

Bzw. ich sollte dazusagen, das die gesagte erweitere Richtextbox ich eine Komponente ist (GUI Komponente) welche ich ins Formular gezogen habe.

04.03.2008 - 13:30 Uhr

Ok nun habe ich was rausgefunden:

Ich habe ja wie gesagt eine Richtextbox erweitert (Insert Funktion).
So wenn nun meine Oberfläche (GUI-Thread) etwas mittels Insert in die Richtextbox schreiben will dann Prüft er in der Insert Funktion, this.InvokeRequired. Dabei kommt True raus.
Nun macht er nochmals Invoke, bei welchem er ja hängen bleibt.

Eigentlich müsste er doch bei InvokeRequired false sagen oder?
Wenn ich nun aus this.Invoke -> this.BeginInvoke mache, funktioniert es.
Habe ich hier nen Denkfehler????
Grüße
Tobias

04.03.2008 - 11:04 Uhr

Sorry herbivore das ich nochmal nerfe... aber mir ist das noch nicht ganz klar...

gleiches Beispiel wie ich zuvor gepostet habe...

Ein Timer der in der GUI läuft und immer die Daten holt ist klar..
So du hast geschrieben wenn man das Add per Control.Invoke aufruft, dann ist es synchronisiert.
Rufe ich das Add aber aus einem Thread heraus auf ohne Control.Invoke, dann ist es doch nicht synchron oder?

04.03.2008 - 07:31 Uhr

Hallo herbivore,

wie würde dass dann bei folgendem Code aussehen:


//Code nicht im VS geschrieben und nicht getestet
public class Test
{
    private Arraylist Liste = new Arraylist();
    
    public void Add(String[] Daten)
    {
        foreach(String f in Daten)
        {
            Liste.Add(Text);
        }
    }
    
    public object[] HoleDaten()
    {
        object[] retDaten = Liste.ToArray();
        Liste.Clear();
        return retDaten;
    }
}

Wenn ich auf diese Instantz der Klasse jeweils von einem zusätlichen Thread und von Form aus zugreife, dann sollte doch ein lock rein oder nicht?

Beispiel:
Ein Thread wartet auf Nachrichten vom Netzwerk.
Sobald Daten kommen schreibt er die Daten mittels Funktion Add in die Liste.
Die GUI Liest kontinuierlich von der Liste mittels HoleDaten.
Wenn nun der Thread mehrere Daten eintragen will (1000 Stück oder mehr).
Und gleichzeitig die GUI die DatenHolt, dann gibts einen Crash.

03.03.2008 - 21:31 Uhr

Was mir vorallem komisch vorkommt, dass er beim ersten mal
lock(sperren)
bereits stehen bleibt.

Da es wie gesagt der Erste aufruf des locks ist, kann es eigentlich nicht sein, das es ein deadlock ist.
Habe heute noch kräftig Probiert, konnte aber kein Problem und keine Lösung finden...
Bis auf das lock weglassen.
Somit ist aber der Fehler nur unterdrückt und nicht behoben.
Grüße

03.03.2008 - 13:17 Uhr

Ok
Aber trotzdem verstehe ich nicht, warum er sich aufhängt, sobald er das erstel mal den lock(sperren) macht.
Wie wenn der "sperren" bereits gelockt wäre.

Aber trotzdem danke für deine Infos haben mir gut geholfen.

03.03.2008 - 12:52 Uhr

Wenn zwei Meldungen relativ schnell hinterander ausgelöst werden (oder direkt nacheinander).
Dann kommt die erste Meldung in die Funktion.
Der ganze Text der Richtextbox wird kopiert und der neue text vorne dran gehängt.
Anschließend wird der Text wieder in die RTFBox geschrieben.
Wenn nun aber zwischendrein die zweite Meldung kommt, dann kann es sein, dass die zweite Meldung den Text ausliest, bevor die erste den neuen Text wieder eingefügt hat.
Somit würde Meldung 1 untergehen.

Deshalb habe ich ein lock eingebaut.
Die Meldungen werden ja per Timer verschickt bzw. per Events.

03.03.2008 - 12:39 Uhr

Also wenn ich das lock rausmache, habe ich keine Probleme mehr.

Aber wenn das lock drinne ist, dann geht es nicht.
Leider sollte ich das lock drinne lassen, weil diese Funktion den übergebenen Text am Anfang der Box schreibt.

Die mache ich mittels:
strNeuerText += (str + Environment.NewLine);
this.SelectionStart = 0;
this.SelectedText = strNeuerText;

So wenn nun in der Box etwas mehr Text ist, und mehrmals hintereinander eine meldung geschrieben werden soll, dann kann es evtl. zu problemen führen.

03.03.2008 - 12:17 Uhr

Hallo zusammen,

habe da ein kleines Problem...
Ich habe mir eine Richtextbox Komponente Erstellt, mit einer zusätzlichen Funktions Insert.
So nun habe ich in der Insert funktion folgenden Code:


public void Insert(String Text)

    if (this.InvokeRequired)
    {
        this.Invoke(new InsertDelegate(Insert), Text);
    }
    else
    {
         lock (sperren)
         {
              //mach was
         }
    }


Zudem habe ich eine DLL welche einen System.Timers.Timer besitzt.
Dieser Timer schreibt bei jedem Elapsed etwas in die Richtextbox (aber mittels Event).
So aufeinmal hängt meine GUI.
Wenn ich auf Pause im VS drückt, sehe ich dass er in der Zeile
lock (sperren)
steht.
So und da bleibt er auch.

Ich habe zwar schon die Ganzen Post bezüglich "Meine GUI hängt" gelsene.
Komme aber in meinem Fall nicht auf die IDEE wo hier mein Deadlock ist.

Hat einer ne idee?

Grüße
Matrix

31.01.2008 - 11:46 Uhr

Hallo zusammen,

ich arbeite mich gerade mit Visual Studio 2005 Team Suit in Unit Testing ein.
Nun bin ich im Internet immer öffters auf den Begriff "Mock" (Rhino Mocks etc...) gestoßen.

Wie ist das nun zu verstehen ein Mock soll ja sozusagen ein größeres Objekt darstellen, welches man zum Testen benötigt (z.B. Datensatz aus einer Datenbank).

Bei Visual Studio kann man einen Accessor erstellen ist das irgendwie dasselbe?
Mit dem Accessor kann man auf private Felder und Methoden zugreifen.
Ist das auch der Sinn eines Mock's?

Oder ist ein Mock was ganz anderes?
Wenn ja wozu ist dann ein Mock?

Grüße
Matrix

21.01.2008 - 07:38 Uhr

Finde das Projekt echt nicht schlecht.
Weiter so.

Grüße
Matrix

15.10.2007 - 11:08 Uhr

Hätte ja sein können, das es da schon sowas gibt.

Danke.

15.10.2007 - 11:00 Uhr

Hallo,

ich bin gerade daran, ein Projekt von 1.1 auf 2.0 zu Konvertieren.
Dabei bin ich nun auch auf das Problem mit der CrossThreadException gestoßen.

So ich habe von herbivore das FAQ gelesen und folgenen Code entdeckt:


void MyAccessToControls ()
{
   if (ctrl.InvokeRequired) { // Wenn Invoke nötig ist, ...
      // dann rufen wie die Mehode selbst per Invoke auf
      ctrl.Invoke (new MethodInvoker (MyAccessToControls));
      return;
   }
   // eigentlicher Zugriff; läuft jetzt auf jeden Fall im GUI-Thread
   ctrl.Text = "Hello World!";
}

Bei mir besitzt die Funktion aber Parameter.
Leider besitzt die Klasse MethodInvoker keine Überladung für Parameter.
Gibt es eine einfache Lösung für ein solches Problem?
Es gibt ja z.B: auch ein ParameterizedThreadStart gibts sowas dafür auch?

Grüße
Matrix-NTN

14.10.2007 - 12:12 Uhr

@herbivore:
Ich bin eigentlich auch nicht für Überwachungssoftware. Aber wie tom-essen schon gesagt hat, wenn beide Eltern beim Arbei sind, und die Kinder was für die Schule machen müssen sollten die Kinder das ja auch machen. Und man steht ja nicht immer hinter den Kindern.

Von einem Arbeitskollege hat sich sein Sohn vor ca. 1/4 Jahr bei www.p2p-heute.de angemeldet.
Bei solchen seiten werden die Kinder meist durch viele Versprechen der Seite dazu überredet, sich anzumelden. Bei ihm ist nichts passiert, da das Kind noch keine 16 Jahre alt war. Aber der Rechtsanwalt wurde dennoch eingeschaltet, da größere Rechnung von der Seite offen war.
Wenn man dann halt auch mehrere Kinder hat, dann ist es nicht ganz so einfach diese im Internet unter kontrolle zu halten.
Deshalb ist eine solche Software auch zum Schutz der Kinder.

Zum Technischen:
Ich habe die C# Firewall von COdeproject nocheinmal genauer angesehen. Diese nutzt die DLL iphelper.dll ichweis nun nicht genau wie sich die DLL in den Netzwerkverkehr einhängt aber laut eineigen Posts in anderen Foren soll das relativ sicher sein.
Aber für ein Kind gäbe es ja fast nichts leichteres, als einfach das Programm oder noch einfacher das .Net Framework zu deinstallieren. Deshlab weis ich nicht, ob eine C# Firewall wirklich das richtige ist.
Die meisten Kinden besitzen ja ein Adminkonto, da Mama oder Papa nicht bei jedem neuen Programm kommen möchte um dieses zu INstallieren.
Da ich aber leider mich in c++ nicht so super gut auskenne möchte ich eigentlich gerne eine C# firewall machen. Habt ihr ne idee wie man sowas absichern könnte?
Was ich leider auch noch nicht gefunden habe, ist wie man herausbekommt, welcher Prozess hinter dem TCP Verkehr steckt. Das wäre eine weitere wichtige Funktion.
Es gibt von der IPHelper eine Funktion, welche alle Verbindungen ausgibt, inkl Prozess. Aber da wäre es ja schon zu spät.
Kennt einer von euch ne möglichkeit die zu bewerkstelligen?

Grüße
Matrix-NTN

Es gibt auch noch die SOftware "Parents friend" diese finde ich eigentlich sehr gut, nur leider wird diese nicht mehr weiter entwickelt, bzw. der letzte Release war 21.4.2006. Zudem werden die Internetseiten in der Titelzeile geprüft.

13.10.2007 - 21:16 Uhr

Hallo zusammen,

ich wurde von ein paar Kollegen vermehrt angefragt, ob es denn eine Kinderschutzsoftware für den PC gäbe, bei welcher eingestellt werden kann,
wie lange ein Kind / Tag am PC sein darf, und wie lange es davon ins Internet darf.
Außerdem sollten die aufegerufenen Internets seiten gerpüft und ggf. Blockiert werden.

Ich habe mich desbezüglich mal erkundigt. Auch in der ct 8/07 war ein Test von einigen Programmen drin. Leider bin ich von den Teilen nicht ganz überzeugt.
Nun habe ich mir gedacht, sowas könnte man doch eigentlich nachprogrammieren.
So das wäre ja nun nicht so schwer, aber das mit dem Internet überprüfen / zulassen ist mir noch nicht ganz eingeleuchtet.
Daszu müsste die Software doch eine Firewall sein, bei welcher eingestellt werden kann, welche anwendungen ins Internet dürfen, und welche nicht. Oder sogar den ganzen Internetverkeht stoppen.
Wie würdet ihr das machen?
Ich habe auf Codeproject.com schon einen Artikel über eine C# Firewall gelesen und ausprobiert. Funktioniert eigentlich ganz gut, aber ich denke mit C# bzw. ohnen einen Treiber, welchen ich ins System intigriere, ist die FW nicht sicher oda?
Zudem weiß ich nicht, wie die Firewall mitbekommt, welche anwendung gerade ins Internet zugreifen möchte.
In der C# Firewall, kann ich nur Src & Dst IP/Port angeben. Wenn ich aber nun sagen, dass nur der Firefox ins Netz darf, muss die Firewall doch wissen welche anwendung gerade ins Netz möchte. Wie ich das herausbekomme konnte ich noch nirgends finden. Wieß einer von euch da etwas mehr?

Danke im voraus für eure Antworten.
Grüße
Matrix-NTN

13.10.2007 - 21:06 Uhr

Also ich nutze früher McAffee...
Den ich aber wegen extremer Sys-Belastung und sehr schwierig zu installierenden Updates heruntergeworfen habe.
Ich habe dann viele Scanner verglichen und getestet.
Schlussendlich bin ich bei Nod32 stehen geblieben.
Und nutze Nod32 nun schon seit ca. 2 Jahren obwohl ich eigentlich gar nichts von dem Scanner bemerke g.
Diesen habe ich nun an 4 Rechnern installiert, und bin mehr als nur zufrieden!!!!
Auch ein paar Arbeitskollegen habe ich geraten, diesen Scanner zu erwerden.
Sind alle bestens zufrieden.

12.10.2007 - 20:30 Uhr

Sorry Lion1984...
Habe das irgendwie überlesen.

12.10.2007 - 13:20 Uhr

Der Rabattcode funktionierte bei mir auch nicht... 😦
Habe dann bei dem Verlag Angerufen, der meinte, ich soll einfach in ein freies Feld
(z.B.: Abweichende Lieferanschrifft) schreiben, dass ich bei MyCsharp mitglied bin.
Dann bekomme ich die 15% Rabatt...

Grüße
Matrix-NTN