ich habe mal gehört, dass es mit .NET möglich ist dynamisch eine Klasse aus Code zu generieren. D.h. ich gebe in irgendeiner Form Quellcode an und dann kann ich mit C# daraus eine Klasse erstellen, die ich dann direkt verwenden kann. Weiß da jemand, was das sein könnte?
Was mir auch grad noch einfällt: Wenn ich myTimer.Stop() aufrufe und myTimer.Start() führt das aber zu keinem Fehler und der Timer läuft wieder. Kann das sein? Wenn der GC myTimer gelöscht hätte müsste das doch zu einem Fehler führen, oder?
Es ist tatsächlich so, dass sich in meinem Programm aber Zyklen befinden. Also A referenziert B und umgekehrt. Hier darf keines der Objekte jemals gelöscht werden. Vielleicht erklärt das die mysteriösen Fehler, die ich zur Zeit bekomme. Setz ich GC.KeepAlive dann jeweils in den Destruktor der Objekte? Also in A ein KeepAlive(b) in den Destruktor von A und genauso umgekehrt?
ok also muss ich den Timer wohl nicht neustarten, danke Das komische ist:
Also ich habe definitiv eine Referenz auf den Timer. Also zumindest auf die Klasse, wo der Timer steckt und diese hat eine private Variable mit dem Timer. Somit dürfte der GC die ja nicht wegräumen, oder?
ich habe in meinem Programm eine System.Timers.Timer, welcher alle X Millisekunden ein Event auslöst. Das funktioniert auch immer ganz gut, aber nach einer Zeit scheint er kein Event mehr auszulösen. Ich finde hierfür auch kein Muster. Ich hab eine Multithreading - Anwendung und habe schon überlegt, ob hier irgendwo ein Fehler auftritt und sich vielleicht der Timer - Thread verabschiedet. Aber jetzt ist mir noch eine andere Idee gekommen:
Wenn ein Timer ein Event wirft, weil die Zeit abgelaufen ist, muss ich dann den Timer wieder neu mit Start() starten? Oder macht er das immer automatisch? Im Moment macht er es zwar automatisch, aber hört nach einiger Zeit wohl damit auf.
Oder hat jemand irgendeine Idee, woran das liegen kann?
weiß jemand, ob und wie ich die Windows System Sounds abschalten kann? Über irgendeine Windows API müsste das doch möglich sein, aber ich finde nichts dazu.
Ich hab mittlerweile rausgekriegt, dass man mit System.Media.SystemSounds zumindest die Windows Signaltöne abspielen kann, aber nicht, wie ich sie alle deaktivieren kann.
Ist auch nur temporär, die schalte ich dann wieder an
es gibt ja in .NET diese Webbrowser Komponente, die wahrscheinlich mit dem Internet Explorer im Hintergrund arbeitet. Jetzt habe ich das Problem, dass immer, wenn ich eine Seite ansteuere gibt es so einen komischen Klick, wie wenn ich im Internet Explorer, auf eine Seite surfe. Kann ich das irgendwie abschalten? Also nur für mein Programm. Oder muss man das unbedingt in den System Einstellungen von Windows abändern?
Hm und kann ich das irgendwie umgehen? Oder kann ich andere Platzhalter einfügen, die dann ersetzt werden? Also das obige Beispiel mit Replace macht halt Probleme, wenn z.B. in %A% auch ein %B% enthalten ist, weil das dann wieder ersetzt wird. Das möchte ich gerne vermeiden.
<HTML>
<HEAD>
<script type="text/javascript">
<!--
function setTitle(title) {
top.document.getElementById("title").innerHTML = title;
}
function refresh() {
var artist = "{0}";
var title = "{1}";
var album = "{2}";
setTitle(title);
}
//-->
</script>
</HEAD>
<BODY OnLoad="javascript:refresh();" bgcolor="#000099"></BODY>
</HTML>
danke für den Tipp. Also mit string.Format habe ich es jetzt mal versucht, funktioniert in einem Beispiel auch ganz gut. Nun wollte ich einen etwas komplexeren Text ersetzen und erhalte nun:
System.FormatException: Die Eingabezeichenfolge hat das falsche Format
Was könnte denn der Grund hierfür sein? Ich habe einfach ein Stück JavaScript Code, wo {0} und {1} usw. vorkommen und möchte die einfach ersetzen.
ich experimentiere zur Zeit mit dem HttpListener und in diesem Zusammenhang mit HttpListenerResponse rum. Nun habe ich das Problem, dass ich gerne über den Browser über eine bestimmte URL ein Bild anzeigen lassen, um genau zu sein ein Png, welches ich in meinen Resourcen habe. Unabhängig davon ist es einfach ein Bitmap welches ich anzeigen möchte. Das hier ist mein aktueller Versuch:
habe folgendes Problem: Ich habe einen String mit bestimmten Platzhaltern.
"Das %A% ist ein %B% Test."
Nun möchte ich an den Stellen von %A% und %B% weitere Strings einsetzen. Das Problem ist, wenn ich das mit Replace mache und zuerst %A% und dann %B% ersetze: Ist in %A% auch wieder %B% enthalten wird das anschließend auch ersetzt. Das möchte ich gerne verhindern. Wie gehe ich denn da am geschicktesten vor? Muss ich mir da Positionen merken, was ich bereit ersetzt habe? Oder gibt es da was schönes in C#?
Hm, kann ich sowas in Visual Studio automatisch anzeigen lassen? Oder mach ich das auf die gute alte Methode und lass mir irgendwelche Meldungen ausgeben?
Hm, das ist echt merkwürdig. Denn ich habe definitiv nur ein lock, um eine Methode. Und die wird nur gestartet, wenn ich auf einen bestimmten Button klicke, ansonsten nicht. D.h. es kann eigentlich gar keinen zweiten Aufruf der gelockten Methode geben. Ich werde nochmal alles durchsuchen.
das ist ja interessant, so habe ich es noch gar nicht betrachtet. Also ich erzeuge den Timer schon im GUI-Thread, aber Start() führe ich woanders aus. Macht das dann auch noch Probleme?
danke für den Tipp. Ich habe nun alle Invokes durch BeginInvoke ersetzt und nun funktioniert es. Aber ich verstehe absolut nicht, wieso das passiert. Die Methode wird definitiv nicht zweimal aufgerufen, habe das auch mit Breakpoints überprüft. Wenn dann muss irgendwo anders ein Lock liegen. Kann sowas sein? Ich führe ja immer lock (this) aus. Machen das andere Methoden vielleicht auch, ohne dass ich das mitbekomme?
ich arbeite zur Zeit viel mit Threads und nutze dementsprechend auch häufig invoke.
Jetzt habe ich um eine Methode mal ein lock (this) gebaut, um die Methode zu synchronisieren. Auf einmal fliegt mir mein ganzes Programm um die Ohren Es scheint nicht wirklich einen Deadlock zu geben, weil die Methode wird definitv nur einmal aufgerufen. Ein Problem scheint viel mehr beim Invoke aufzutreten. Hat jemand eine Idee, was hier Probleme machen kann? Gibt es mit lock und Invoke irgendwas zu beachten?
Oder macht lock (this) Probleme?
Bin etwas ratlos, weil es wie gesagt kein Deadlock ist, sondern er bei Invoke irgendwie hängt.
habe folgendes Problem: Ich habe eine Klasse A und eine Klasse B.
Klasse A hat einen Timer T und eine Methode M. In M wird der Timer T gestartet, welcher regelmäßig ein Event feuert, bei dem sich B registriert hat.
Nun starte ich aus B die Methode M und erhalte regelmäßig das Event.
Wenn ich nun aber die Methode M in einem extra Thread starte erhalte ich keine Events mehr. Ich erkläre mir das ja so:
M startet ja nur den Timer und ist dann fertig. Wird dafür ein neuer Kind-Prozess erzeugt? Wenn M zurückkehrt wird der Thread beendet und somit auch der Timer-Prozess. Ist das so korrekt? Oder hab ich was übersehen?
Jetzt kann es ja sein, dass ich in meinem Programm ein Modul verwende, wo ich nicht weiß, dass es einen Timer aufruft. Ich führe einfach die Methode in einem extra Thread aus und werde später irgendwann überrascht sein, weil es nicht funktioniert. Wie macht man das dann für gewöhnlich? Der Timer läuft ja endlos und außerdem in einem extra Thread. D.h. ein Join bringt gar nichts. Oder sind das eben Dinge, die ich wissen muss, wenn ich eine andere Methode verwende?
erhalte ich leider eine Fehlermeldung, weil list wohl keine Instanz von Object ist. Was muss ich denn hier ändern? Muss IPlaylist noch von irgendwas anderem erben? In list befindet sich ein Object vom Typ Playlist, welches das Interface IPlaylist implementiert. Muss ich das vielleicht nach object casten?
erstmal danke für die Tipps. Was sind denn eingebettete Dateien, die nicht in meiner Resourcen-Datei sind? Heißt das, dass ich die einfach nur als Datei in den Ordner schmeiße und nicht als Resource hinzufüge?
public delegate void PlayHandler(int i);
public event PlayHandler PlayEvent;
Jetzt möchte ich das gerne in ein Interface auslagern:
public interface Irgendwas {
event PlayHandler PlayEvent;
}
Das funktioniert nicht, weil er PlayHandler nicht kennt. Was nehm ich denn dann?
public interface Irgendwas {
event EventHandler PlayEvent;
}
Das hab ich gefunden. Aber wenn ich das nehme meckert er, dass ich ja "event PlayHandler PlayEvent" implementiert habe, wenn ich das Interface implementiere und nicht "event EventHandler PlayEvent"
Projekt B wird zu einer Dll und von A eingebunden.
A benutzt Klassen aus B.
Soweit kein Problem.
Jetzt ist es aber so, dass ich in Klassen aus dem Projekt B auch Klassen aus A benötige. Wenn ich nun A in B einbinde, nachdem ich ja B in A eingebunden habe meckert der Compiler, da es wohl zu zyklischen Abhängigkeiten kommt.
Hat jemand eine Idee, wie ich das lösen kann? Muss ich B unbedingt als Projekt in A integrieren, oder kann ich weiterhin Dlls nutzen?