Okay, außerhalb von Visual Studio tritt dieses Problem nicht auf. Also, Release gebaut, die Exe gestartet, Speicher bleibt im grünen Bereich. Es scheint also ein Visual Studio Problem beim Debuggen zu sein.
Ich habe im Visual Studio die Memory Usage ausgeben lassen und dort steigt der Speicher beständig an, siehe angehängte Bilder.
Ich vermute das es irgendwelche Bindings sind, die nicht ausgeräumt werden?!
ich habe eine ListView die per ItemSource eine ObservableCollection bindet. Die ObservableCollection wird alle 2 Sekunden aktualisiert.
Dabei entstehen bei jeder Aktualisierung sehr viel neue WeakReference Objekte die nicht mehr abgebaut werden
Hier ist das ViewModel
public class SomeString : BaseViewModel
{
public SomeString ( string test )
{
m_test = test;
}
private string m_test = "AAA";
public string SomeTest
{
get => m_test;
set
{
m_test = value;
OnPropertyChanged ( nameof ( SomeTest ));
}
}
}
public class MainWindowViewModel : BaseViewModel
{
public ObservableCollection<SomeString> SomeList { get; set; } = new ObservableCollection<SomeString> ();
private Timer m_timer;
public MainWindowViewModel ()
{
m_timer = new Timer ( new TimerCallback ( TimerCallback ));
m_timer.Change ( 2000, 0 );
}
private void TimerCallback ( object state )
{
SomeList = new ObservableCollection<SomeString> ();
SomeList.Add ( new SomeString ( "AAA" ));
SomeList.Add ( new SomeString ( "BBB" ));
SomeList.Add ( new SomeString ( "CCC" ));
OnPropertyChanged ( nameof ( SomeList ));
m_timer.Change ( 2000, 0 );
}
}
Wollte nur mal Fragen ob man den ColorSlider auch selbst verwenden darf?
LG Karim
Joa ich denke schon, den ColorSlider hab ich von CodeProject.
@64Bit
Jap, das gleiche Problem hatte ich auch bis vor kurzem.
Da ich bisher nur 32 Bit Betriebssysteme verwendet hatte ist mir das gar nicht aufgefallen ;)
Ich hab grad ein neues Release hochgeladen wo einige Änderungen und Verbesserung schon enthalten sind.
Mittlerweile geht auch Drag and Drop sowie Parameterübergabe.
Hakt allerdings noch an der ein oder anderen Stelle ;)
Das Release sollte auch mit Windows 7 und 64 Bit zurecht kommen :)
Ich fände es noch komfortabler wenn die Punkte angezeigt würde die man mit der jetzigen Konstellation er würfelt hat. Beispielsweise wenn man mit der Maus auf den Bleistift Button geht, wird die Punktzahl in roter Schrift in dem Feld angezeigt.
Eine Highscore wäre wirklich super.
Da du ja den Source mitgeliefert hast, darf man diesen verändert??
Ok Livecycle hin und Livecycle her, das Problem bleibt trotzdem bestehen :(
Ich hab jetzt mal die 'OnLoadComplete' Methode überschrieben um mein Layout zu machen. Das Problem dabei ist, das alle Controls die ich in der 'OnLoadComplete' hinzugefügt habe, ihre Werte nicht mehr speichern. Nur die Controls die vor der 'OnLoadComplete' 'Livecyclehierachie' geadded wurden behalten ihre Werte?
Zur Veranschaulichung: Grün eingekreist sind die vor 'OnLoadComplete' hinzugefügten Controls rot eingekreist die nach 'OnLoadComplete'.
Man sollte schon in die richtige Methode schauen *schäm*
protected void btnOnChange_Click ( Object Sender, EventArgs e )
{
String Str = m_ctrlTextbox.Text; // Hier wird der Text richtig angezeigt
int k = 4711;
}
In der Eventhandler Methode hat die Textbox natürlich den gesuchten Wert. Ich habe immer in die 'Page_Load' Methode rein debuggt.
Das heißt ja:
1.ASP ruft zuerst die 'Page_Load' Methode auf -> Instanzierung aller Controls.
2. Dann füllt ASP alle Controls mit bekannter ID mit Werten aus dem Response.
3. Event-Methode wird aufgerufen
???
Wenn das so ist, dann hab ich allerdings ein Problem: Denn in 'MakeLayout' die von 'Page_Load' aufgerufen wird, benötigt den Wert aus der 'TextBox' um das dynamische Layout zu designen?? :(
Ich hab jetzt mal eine ganz einfache Seite gemacht.
Dort habe ich eine Textbox im Codebehind erzeugt und sie dort per 'form1.Controls.Add (...)' hinzugefügt. Dort funktioniert sie auch so wie sie soll :)
Bei der anderen Seite funktioniert es leider immer noch nicht.
Ausganglage:
Es ist eine 'WebContentForm'. Auf dieser habe ich per Designer eine 'Asp.Table' mit der 'ID=LayoutTable' hinzugefügt:
Mein Problem ist nach wie vor, das ich nicht auf die Controls, die ich in 'MakeLayout ()' erzeuge und der 'LayoutTable' hinzufüge, zugreifen kann? Die besagte Textbox ist momehtan ein Member der Klasse heißt 'm_ctrlTextBox' und wird in 'Page_Load' instanziiert.
Der Unterschied zu meinem ersten Beispiel ist zweifelsohne, das ich die Textbox dort der 'form1' dirket zuweise?
Müsste nicht die 'LayoutTable' automatisch von Asp einer Form zugewiesen werden? Es ist ja eine ContentPage? Zudem mit dem Attribut 'runat=Server'?
class mypage
{
protected Control m_MyTextBox;
protected override void OnInit(...)
{
m_MyTextBox = new Textbox();
Page.Controls.Add(m_MyTextBox);
}
}
Wenn ich das so mache, dann speichert die Textbox keine Werte. Wenn ich per Button den Event auslöse, ist der eingegebene Wert der Textbox weg?!
Bei jedem Seitenaufruf wird auch immer ein neues Textbox Objekt angelegt? Das kann es ja auch nicht sein, ist ja klar das der Wert dadurch verloren geht?!
Genau das passiert ja im Designermodus nicht, dort behält die Textbox ihren Wert nach dem Buttonklick?
erstmal danke für die Antworten. Ich konnte am Wochenende leider nix machen, deswegen schreib ich erst jetzt.
Ich baue die Tabelle mit den Controls genauso auf wie Syst3m es geschrieben hat. Also in der Page_Load per Methoden Aufruf.
Wenn ich die Textbox dynamisch hinzufüge, muss ich dann immer mit FindControls arbeiten? Wenn ich die Textbox, per Designer ( VS 2008 ) auf die '*.aspx' Datei ziehe dann kann ich sie ja im Codebehind direkt als Member ansprechen?
Geht das auch wenn ich die Textbox dynamisch hinzufüge, quasi wenn ich sie zum Member der Klasse machen?
FindControls hatte ich schon probiert, da hat er keine Textbox gefunden? Liegt das an einer falschen ID?
Den zweiten Parameter von FindControls versteh ich nicht?
Ich werde heut abend nochmal das FindControl probieren.
Nochmal kurz zu meinem Vorhaben:
Auf einer Aspx Seite sollen eine Textbox + Button angezeigt werden. In die Textbox kann man eine Zahl eingeben. Je nachdem welche Zahl man eingegeben hat, sollen auf dieser Seite in einer Schleife weitere Dynamische Controls erzeugt werden.
ich hab ein Problem mit einer Dynamischen Textbox.
Ausgangslage:
Ich habe im Designer eine Tabelle angelegt, diese befülle ich im Code-Behind mit TableRows und TableCells. In einer Celle erzeuge ich auch eine Textbox und einen Button, dem ich einen Event zuweise. Die Textbox und der Button werden auch wunderbar im Html angezeigt, wenn ich allerdings auf den Button klicke, komme ich nicht an den Wert der Textbox heran?
Ich schreib im Aspteil 'div' Elemente mit 'Runat=Server' und er generiert mir im Hintergrund ein 'HtmlGenericControl' was ich dann in der abgeleiteten Page Klasse als Member ansprechen kann und dort die Eigenschaften verändern kann.
So funktionieren dann wohl alle Asp-Controls. Dat find ich super, ich dacht schon ich müsst den Response-Kram schreiben ;)
Joa mir fehlen da wohl wirklich ein paar Basics, hab bisher leider keine gute Einführung in ASP.net gefunden :(
Trotzdem noch mal vielen Dank für die Aufschlussreichen Antworten :)
ich habe eine Seite, die je nach einer bestimmten Bedingung unterschiedliches Html ausgeben soll. Mir fällt da momentan nur diese Lösung ein, die ich aber doof finde, da es jetzt Logik im Htmlteil gibt. Kann man das ganze irgendwie anders lösen?
<%@ Page Language="C#" MasterPageFile="~/Html/VxBet.Master" AutoEventWireup="true" CodeBehind="Tipp.aspx.cs" Inherits="VxBet.Html.Tipp" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%
if ( bedingung )
{
%>
Erste Ausgabe mit Html
<%
}
else
{
if ( bedingung 2 )
{
%>
Zweite Ausgabe mit Html
<%
}
else
{
%>
Dritte Ausgabe mit Html
<%
}
}
%>
Das an/ausschalten der Buttons für "Wiederholen" und "Zufall" funktioniert noch nicht so ganz:
hm... inwiefern funktioniert das nicht?
Also bisher ist es so, das wenn man den 'Wiederholen' Button Klickt, dieser eingedrückt bleibt. Damit wird signalisiert, das nach Ende der Playliste wieder automatisch von vorne angefangen wird.
Der Shuffle Button dagegen, Shufflet im Moment nur die Liste durch und kann nicht eingedrückt werden.
Dazu muss ich noch sagen, das ich einen anderen Shuffle Modus, als 'normal' eingebaut habe. Da mir die heutigen Shuffle-Modi nicht gefallen:
-es werden immer die gleichen Lieder angespielt
-es werden unter Umständen nicht alle Lieder angespielt
Shuffle ich nur die Liste und geh dann von Anfang bis Ende in anderer Reihenfolge durch. Somit werden immer alle Titel gespielt, aber die Reihenfolge ist jedesmal anders.
Ich hab den Chocochino überarbeitet und die Funktionsweise ein bisle geändert:
Es gibt jetzt 2 Views:
1. TreeView mit Dateisystem
2. TreeView für Datenbank mit Playlisten
In dem 1ten View kann man einzelne Mp3s aber auch ganze Ordner zur Datenbank hinzufügen. Gleichzeitig ist es dort schon möglich die Mp3s anzuhören.
Um Ordner zur Datenbank hinzufügen einfach einen Rechtsklick auf den Ordner im TreeView und 'Hinzufügen zu -> Datenbank' auswählen
In dem 2ten View werden die Datenbank und die Playlisten in einem TreeView angezeigt. Dort ist es möglich die aktuelle Auswahl zu sortieren und zu filtern.
Zum sortieren einfach auf die Spaltenköpfe der Liste klicken. Zum Filtern einfach einen Begriff eingeben und die entsprechende Checkbox auswählen. Wenn man Suchbegriffe mit einem ';' trennt, kann man auch mehrere Suchwörter eingeben.
Mit einem Rechtsklick in die Liste kann man auch jederzeit die Titel in eine Playliste einfügen lassen.
Um die Playlisten zu verwalten gibt es noch einen Playlisten Manager, dort kann man Playlisten anlegen, löschen und Titel hinzufügen sowie entfernen.
Was noch arg verbesserungswürdig ist, ist die Benutzersteuerung da wäre ich für ein paar Vorschläge dankbar :)
-----
Zitat von moq
Hallo Sieben,
einige Bugs / Verbesserungswünsche:
...
Hoffe ich konnte dir einige Anregungen geben. Sieht schon ganz gut aus! :)
Viele Grüße,
Hi moq,
danke für deine Bugmeldungen und Verbesserungswünsche. Ich hab schon einige davon umgesetzt andere sind noch in Arbeit :)
Zitat von moq
+ Der Titel / Artist des aktuellen Stücks "ändert" sich bei Sortierung der Tabelle. Genauer gesagt, dass Label.
(MP3 abspielen -> dann z.B. nach Titel sortieren -> Titel / Artist ändert sich auf den ersten und automatisch selektieren Eintrag in der Tabelle)
Sollte behoben sein :)
Zitat von moq
+ Komplette MP3 Ordner zur Playlist hinzufügen wäre toll! Leider kann man nur einzelne bzw. mehrere MP3's zur Playlist hinzufügen, aber keine kompletten Ordner.
Kann man jetzt über die Dateibaumansicht. Leider geht das ganze noch nicht Rekursiv :(
Zitat von moq
+ Beim Hinzufügen von MP3's sollte noch abgefangen werden ob es sich um eine MP3 Datei handelt. Wenn man versucht etwas anderes zur Playlist hinzuzufügen bsp: JPG/TXT stürzt das Programm ab. Ohne Fehlermeldung.
In der Dateibaumansicht werden jetzt nur noch unterstützte Dateien angezeigt
Zitat von moq
+ Drag'n' Drop wäre nett. Bsp. aus dem Explorer eine MP3 zur Playlist hinzufügen.
Drag 'n' Drop ist noch ein bisle Buggy, momentan fügt er die Mp3s nur zur Datenbank hinzu. Später soll es aber auch für Playlisten funktionieren
Zitat von moq
+ Shortcuts. Bsp. STRG + O Öffnen, etc.
Werden noch eingebaut.
Zitat von moq
+ Playlist -> HTML.
Hm... dazu eine Frage, wie soll die Html Seite dazu aussehen?
Zitat von moq
+ Wenn man beim letzten Stück (bsp. #3) der Playlist ist und auf > klickt, springt er nicht wie erhofft zum ersten Eintrag.
Sollte behoben sein
Zitat von moq
+ Es ist möglich in der "Playlist Verwaltung" Playlists ohne Namen (leerer "Playlistname") hinzuzufügen.
Sollte behoben sein
Zitat von moq
+ Es wäre schön wenn man in der "Playlist Verwaltung" mehrere Einträge selektieren könnte um sie bsp. zu löschen.
Sollte behoben sein
Zitat von moq
+ Beim Exportieren einer Playlist ins M3U Format sollte man einen Pfad + Dateinamen angeben können.
Momentan ist die Export und Import Funktion nicht aktiv, wird aber gemacht
Zitat von moq
+ Die verwendeten Libraries sollten in einen eigenen Ordner gepackt werden und nicht im Root Verzeichnis der Anwendung sein. Bsp. Chococino\libs.
ich suche ein ListView-Control mit Fußzeile. Kennt jemand so ein Control?
Wie könnte man so eine Fußzeile realisieren, mir fällt da im Moment nix ein ?!
Die Fußzeile müsste ja immer am unteren Rand der Liste gezeichnet werden ?!
ich bin prinzipiell für solche dinge offen aber ich (und sicherlich auch andere) habe keine lust mich durch 2400 zeilen hochredundanten, unstrukturierten und unkommentierten code zu arbeiten, damit ich erstmal verstehe was zu machen ist.
Keine genau das gleiche denke ich auch. Du hast ja nicht mal selber Lust das ganze zu machen,
mhh ich glaub ihr habtr die situation falsch gedeutet: ...
Ich weiß nicht, aber du solltest vielleicht deine Benutzersteuerung umbauen anstatt mit irgendwelchen Hacks zu versuchen dein Programm abzusichern:
Ich würde ein Wechseln des Profils nur zulassen wenn alle anderen Dialoge geschlossen sind.
Bei 3maliger Falscheingabe würde ich das Programm nicht beenden, sondern alle Menüpunkte deaktivieren.
Das Programm zu beenden bringt nämlich relativ wenig da clevere Bruteforcer das Programm einfach wieder öffnen würden.
Dazu kommt die Problematik das man C# Code dekodieren kann und somit sämtliche Hinderungsmaßnahmen unschädlich machen kann.
Wenn du was sicheres suchst, stellst du dir ein entfernten Server hin der die Logins mitzählt und den Login nach 3 Versuchen sperrt, so wie es im WWW gemacht wird.
Alles andere ist der Versuch die 'Knackzeit' zu verlängern.