Einfacher wäre jedoch die Standard XML-Serialisierung des .NET-Frameworks:
Personen personen;
// Lesen:
using (StreamReader reader = new StreamReader(sFilename))
{
XmlSerializer xml = new XmlSerializer(typeof(Personen));
personen = (Personen)xml.Deserialize(reader);
}
// Schreiben:
using (StreamWriter writer = new StreamWriter(sFilename))
{
XmlSerializer xml = new XmlSerializer(typeof(Personen));
xml.Serialize(writer, personen);
}
Dazu mußt du dann nur eine Klasse Personen anlegen (welche am besten selber von List<Person> abgeleitet ist), und in der Klasse Person dann die entsprechenden Eigenschaften (Properties) definieren.
Details kannst du dann mit den XmlAttributen festlegen: Attribute zur Steuerung der XML-Serialisierung
Das wollte ich eigendlich vermeinden, weil der User da ja dann noch den Smtp Zugang angeben muss. Und das erschwert die Sache für einige User schon, aber ich werde es dann wohl so machen.
Dank Dir!
wanderameise schrieb:
heisst also, das ich wenn ich synchronisieren will mittels invoke, auf jeden Fall eine Methode die zum delegaten passt erstellen muss?!
Ich muss sagen, dass ich nicht ganz verstehe, was du hier fragen möchtest. Was meinst du in diesem Kontext mit synchronisieren?
wanderameise schrieb:
direkt noch eine frage: Kann ich folgende Schreibweise irgendwie verkürzen, zb. die Methode RecordSentEvent irgendwie mit in die 2. Zeile einbinden?
public delegate void RecordFlashProgress();
public event RecordFlashProgress _RecordFlashProgress;
// würde gerne die obere zeile und den unteren Methodenaufruf verkürzt darstellen, ist das möglich?
public void RecordSentEvent()
{
if (_RecordFlashProgress != null)
{
_RecordFlashProgress();
}
}
Nein: http://blogs.msdn.com/b/csharpfaq/archive/2004/03/19/93082.aspx
Es gibt allerdigns einen Workaround. Man kann einfach immer bereits einen no-op Handler zuweisen. Also:
public delegate void RecordFlashProgress();
public event RecordFlashProgress _RecordFlashProgress = delegate{};
// No-op Handler ^^^^^^^^^^
public void RecordSentEvent()
{
_RecordFlashProgress();
}
Grüssli
NullBockException schrieb:
.. muss ich woll nen spezillen IFormatProvider implementieren!?
Es gäbe da NumberFormatInfo:
NumberFormatInfo nfi=new NumberFormatInfo();
nfi.NumberDecimalDigits=2;
nfi.NumberDecimalSeparator=".";
nfi.NumberGroupSeparator="";
decimal blupp=12.95m;
string bla=blupp.ToString(nfi);
habe es hinbekommen:
var assembly = System.Reflection.Assembly.LoadFrom(@"c:\assembly.dll");
var type = assembly.GetType("namespace.Klassenname");
object instance = Activator.CreateInstance(type);
danke
Danke für den Tipp! Gut zu wissen, was es noch gibt.
Möchte es aber vorerst doch noch über VBA bzw. Word versuchen.
Kann mir da vielleicht doch jemand helfen und sagen, warum, wenn ich die folgenden beiden Code ausführe
RunMacro(oWord, new Object[] { "AufrufTextmarke", "TM" + dr.GetString(1), dr.GetString(1) });
RunMacro(oWord, new Object[] { "AufrufTextmarke", "TM" + dr.GetString(2), dr.GetString(2) });
nur jeweils die letzte eingefügte Textmarke des Datensatzes gefüllt wird bzw. noch im Dokument vorhanden ist?
Kommentiere ich die beiden Zeilen aus, enthält mein Dokument alle Textmarken und jeweils die ID des Datensatzes.
SWW13 schrieb:
Mal noch nen anderer Gedanke:
Random rnd = new Random();
uint number = rnd.Next() + rnd.Next();
MfG SWW13
Das geht so nicht! Würfel mal mit 2 6er Würfeln und siehe was passiert... Die Wharscheinlichkeit dass die 7 fällt ist höher als die 2. Selbes Prinzip bei deiner These.
Jammel schrieb:
Dravere schrieb:
Wieso nicht so?
Und was machst du, wenn du von zwei Interfaces ableitest, die beide eine Funktion haben, die zufällig gleich heißen? IMath.GetProduct, IMarket.GetProduct
Der Fall ist höchst selten. Deswegen implementiert man doch nicht alle Interfaces explizit. Ich mache eine explizite Implementierung erst dann, wenn es auch wirklich nötig ist.
Grüssli
hustbaer schrieb:
Dravere schrieb:
C++/CLI wird in Maschinensprache und CIL übersetzt. C++/CLI ist deshalb meistens ein paar Prozentpunkte schneller als ein normales .Net Programm. Nur was wirklich als .Net benötigt wird, wird auch in CIL übersetzt.
Soweit ich weiss eigentlich genau umgekehrt: alles IL ausser da wo nicht geht (printf und so Scheiss).
Ich glaube mich auch zu erinnern gelesen zu haben, dass der leichte Geschwindigkeits-Vorteil von C++/CLI einfach vom besseren Optimizer kommt.
Ich würde jetzt nicht meine Hand ins Feuer legen. So wie ich es bisher verstanden habe, kommt dies ein wenig auf die Kompileroption an. Wenn man das ganze Projekt mit /clr kompiliert, wird glaub ich, so viel wie möglich in CIL übersetzt. Man kann aber auch nur einzelne Files mit /clr übersetzen, dann werden nur diese Module in CIL übersetzt und der Rest bleibt als Maschinencode erhalten.
Hier sollte man wohl weitere Informationen finden, hab die Dokumente aber noch nicht genauer angeschaut:
http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx
http://msdn.microsoft.com/en-us/library/x0w2664k.aspx
Grüssli
Hi,
hier http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx scheint es jemand mittels C++ schon gemacht zu haben (leider noch kein Managed Beispiel dabei).
Wenn das so ist, dann ist es auf keinen Fall vom Programm selbst gesteuert. Denn im Programm gibt es, wie im obigen Beispiel, eben nur so ein Invoke. Es muss also etwas sein, was Windows oder das .NET-Framework steuert. Und deshalb würde ich eben gerne wissen: Gibt es da irgendwo etwas, was von Windows abgelegt wird, um sich zu merken, wieviel Speicher ein Programm verbraucht hat? Denn wie gesagt: Ich kann den Computer komplett aus- und wieder einschalten und das Phänomen tritt wieder auf. Es ist also keine reine RAM-Geschichte. Ich hab schon ausprobiert, vor und nach dem Start des Programms einen Snapshot zu machen, aber ich hab nicht wirklich was gefunden.
DarthZiu schrieb:
Im Exception Fall, kommt bei myFile.Close() ein Fehler. Aber wieso? Laut Doku soll doch der Code in finally{} sowohl im Erfolgsfall, als auch im Fehlerfall ausgeführt werden!?
Tut es doch auch. Wenn aber der Konstruktor fehlschlägt, wir der Variable auch nie eine Referenz auf das Objekt zugewiesen. Entweder fragst du halt zuerst mit if ab, ob es null ist oder nicht, oder wenn es geht, verwendest du das using Statement.
Grüssli