Hallo Newbie,
wenn Du das EntityFramework verwendest musst Du auf sowas gar nicht acht geben, denn dort wird automatisch auf Veränderungen geprüft (das kannste sogar abfragen).
Ich nehme aber mal an, dass Du quasi "zu-Fuß" unterwegs bist. Auch in dem Falle ist das gar kein großes Problem. Du holst Dir Deine Daten doch sicher aus einer Klasse mit entsprechenden Properties?
Was hält Dich davon ab, bei jeder Property-Änderung dies zu vermerken?
Oder holst Du alles einzeln per ADO.NET ab? In dem Falle (etwas ungünstig) kannste doch trotzdem prüfen ob sich ein Wert verändert hat - im Grunde ginge dies sogar ohne ADO.
Sag mal mehr was Du da einsetzt und vorhast, dann kann man sicherlich auch mehr dazu helfen.
Viele Grüße
Goa
Hi Vitali,
sowas mache ich über ein zentrales 'MainViewModel', und bündel darin die einzelnen ViewModels (ich trenne, wie in Deiner Überlegung eben auch, die ViewModels sehr gerne auf um den Code lesbarer und die Klassen möglichst klein zu halten).
Deine MainView (mit dem Ribbon) bindet somit an das MainViewModel, welches wiederum die 'Unter-'-ViewModels bereitstellt, hierbei ist halt nur wichtig ViewModel-Änderungen nach 'oben' zu melden (INotify...).
Ob das wirklich 100pro MVVM-konform ist weiß ich nun auch nicht, aber so hab ichs mir jedenfalls angewöhnt bislang und es funktioniert super und der Code ist schön sauber
Viele Grüße
Goa
sonic_1233 schrieb:
Hallo Leute,
bei mir tritt folgende Exception auf:
Die DLL "coredll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
Ich hatte ein ähnliches Problem bei einem von meinem Kollegen geschriebenen DLL, die ich lokal erstellte & dann einer Win32-Konsolanwendung zur Verfügung stellte. Der Grund für den Fehler war, dass Microsoft Visual Studio 2010 nicht den passenden Pfad fand. Als ich dann den vollen Pfad dem DLL-Namen vorstellte, ging es:
Statt
const string csDLL_LOCATION= "BasicFunctions.dll";
[DllImport(csDLL_LOCATION)]
public static extern int registerMe(int i);
… verwende ich
const string csDLL_LOCATION = "C:\\Documents and Settings\\…\\BasicFunctions.dll";
[DllImport(csDLL_LOCATION)]
public static extern int registerMe(int i);
Hallo secondsun
Wie stellt ihr euch eine solche vollautomatische Lösung vor? Threadsicherheit alleine heißt nicht, dass beliebige Threads ohne eigenes Zutun einfach mit dem gleichen Objekt arbeiten können, ohne dass es früher oder später knallt.
Wenn mehrere Threads auf die gleichen Objekte zugreifen, kann methodenübergreifende Konsistenz nicht auf magische Weise in dem internen Code der Klasse erreicht werden. Ebensowenig wird es gelingen, etwas so komplexes wie Frameworks, über Wrapper, threadkonsistent zu machen.
Kennst Du die statische Methode System.Collections.Queue.Synchronized()? Damit werden einfach Queues threadsafe gemacht. Wunderbar.
Hast Du dich schonmal gefragt, warum es in System.Collections.Generic kein Pendant dazu gibt? Nachdem was ich vor einiger Zeit mal gelesen habe: Weil zu viele Programmierer in eben jene Falle gelaufen sind und erwartet haben, dass die threadsichere Queue nun beliebig über Threadgrenzen hinweg verwendet werden kann.
Um den Punkt zu verdeutlichen. Folgendes raucht so gut wie immer mit einer InvalidOperationException ab:
class Program
{
static void Main(string[] args)
{
Queue q = System.Collections.Queue.Synchronized(new Queue(Enumerable.Range(0, 100).ToList()));
new Thread((o) => Worker(q)).Start();
Worker(q);
Console.ReadKey(true);
}
private static void Worker(Queue q)
{
while (q.Count > 0)
{
Thread.Sleep(10);
Console.WriteLine((int)q.Dequeue());
}
}
}
Erst wenn Worker synchronisiert wird, funktioniert es.
Auch wenn ich mit dem EF nicht arbeite (sondern mit nHibernate), behaupte ich einfach mal, dass euer Vorhaben nicht möglich ist.
Was man aber realisieren kann, sind Hilfklassen, welche die Arbeit bei Multithreading erleichtern. Ist nur die Frage, was genau erreicht werden soll.
Servus,
der string muss in der Länge gleich dem Format sein. d.h. "dd.MM.yyyy" -> "dd.MM.yyyy HH.mm.ss". Verwende anstatt ParseExact, TryParseExact und überprüfe den Rückgabewert (true / false).
Gruß
Hellsgore
Sieht interessant aus. Ich werde es aber doch bei den Standard-Dateien belassen, weil ich im Moment noch viele andere Sachen zum Laufen bringen muss
Danke für die Antwort.
Gruß
Sonic
ujnhu schrieb:
Wieso wird, wenn man die Eigenschaft BackColor unangetastet lässt, das Ausgrauen automatisch ausgeführt sobald man Enabled ändert? Ergänzt die IDE da etwas, oder wie funktioniert das?
Solchem Verhalten kann man gut mit ILSpy auf den Grund gehen:
http://wiki.sharpdevelop.net/ILSpy.ashx
Damit kannst Du Dir anschauen wie BackColor und Enabled implementiert sind.
Nur falls das entsprechende Verhalten in nativem Code implementiert ist, ist man aufgeschmissen.
Newbie² schrieb:
Ich hätte da mal noch so eine Frage, kann man Bilder einlesen, und das geschriebene in Text umwandeln und wäre es unmöglich für einen Anfänger?
Für mich klingt es momentan so, als würde ich es erst in paar Jahren schaffen...
Wüsste nicht, wie es gehen sollte...
mfG,
Newbie²
Was du suchst, hört auf den Namen OCR (Optical Character Recognition, auch Texterkennung).
Eine sehr interessante und kostenlose Opensource-Lösung ist Tesseract OCR. Schau' dir mal an.
Der Destruktor ist der Punkt, an dem du deinitialisierungen vornehmen kannst.
Solange du dich also im Destruktor der Klasse befindest, kannst du weiterhin auf deren Member zugreifen. - Ausnahme ist, wenn du die Member weggeräumt hast. Dann knallts natürlich.