Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von fungi35
Thema: Deadlock Task.Result
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Abt
Warum soll sie das nicht? Die Fragestellung zeigt zwei Dinge
- Wie async/await funktioniert ist unbekannt - es fehlen Grundlagen :-)
- Das Konzept soll nicht vollständig angewandt werden, was für die Software-Qualität i.d.R. nicht gesund ist

Wir wollen unsere Software von Background-Workern auf das modernere Task-Konzept umstellen. Aktuell sind es nur Testprojekte. Ich sehe, dass da noch viel Schulungs-/Lern-Bedarf ist.

Thema: Deadlock Task.Result
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ja, das hast Du wohl recht. Es ist nur unschön wenn in internen Schulungen falsche Sachverhalte vermittelt werden.

Rein interessehalber: Wie würde ich SaveAsync() innerhalb einer synchronen Methode richtig aufrufen, wenn ich auf await verzichten muss, da die void-Methode nicht als async markiert werden soll?

Thema: Deadlock Task.Result
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich bin gerade total verwirrt. Ich hab' mir die entsprechenden Teile der Doku durchgelesen und den Code geändert.
Kannst Du bitte einmal drüber schauen, ob ich es richtig verstanden habe?


        private async Task<SaveResult> SaveAsync()
        {
            return await Task.Run(() =>
            {
                SaveResult retVal = new SaveResult();
                this.dataprovider.save();

                return retVal;
            });
        }


        public async void SaveItem()
        {
            this.ShowWaitingBar();
            SaveResult result = await this.SaveAsync();
            this.HideWaitingBar();
        }

Thema: Deadlock Task.Result
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Windows-Forms

Thema: Deadlock Task.Result
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Leute,

beim Speichern von Daten bekomme ich sporadisch einen Deadlock in der Zeile "SaveResult result = task.Result;".


        private Task<SaveResult> Save()
        {
            return Task.Run(() =>
            {
                SaveResult retVal = new SaveResult();
                this.dataprovider.save();

                return retVal;
            });
        }


        public void SaveItem()
        {
            this.ShowWaitingBar();
            Task<SaveResult> task = this.Save();
            SaveResult result = task.Result;
            this.HideWaitingBar();
        }


Ich möchte auf das Speichern warten, ohne dass die GUI blockiert. In unser letzten c#-Schulung habe ich gelernt, dass das wie oben umgesetzt die beste Methode wäre. Ich verstehe nicht, warum hier ein Deadlock auftritt.


Gruß fungi

Thema: Separates Unterverzeichnis für DLL
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Leute,

ist folgende Konstellation irgendwie umsetzbar?

1.) Windows-Forms-Projekt verweist auf DLLs der Version 402 des Drittanbieters X.
2.) Das DLL-Projekt "Scheduler" verweist auf auf DLLs der Version 705 des Drittanbieters X (die DLLs heißen gleich).
3.) Ein UserControl des DLL-Projekts "Scheduler" soll im Windows-Forms-Projekt verwendet werden.

Kann ich irgendwie dafür sorgen, dass die DLL "Scheduler" immer aus einem separaten Unterverzeichnis gezogen wird, damit es nicht zu Problemen/Konflikten mit den DLLs des Drittanbieters kommt, die sich in der Version aber nicht im Namen unterscheiden?


Vielen Dank!

Gruß fungi

Thema: Wie kann ich eine ASP.NET REST API auf Https umstellen?
Am im Forum: Web-Technologien

Ich verwende ASP.NET. Was verwendest Du um Zertifikate zu erstellen und zu verwalten?

Thema: Wie kann ich eine ASP.NET REST API auf Https umstellen?
Am im Forum: Web-Technologien

Hallo Leute,

ich möchte gerne eine RestApi auf https umstellen. Ich habe mir hierfür diesen Artikel sowie einige über google gefundene Lektüre durchgelesen.


Folgende Schritte muss ich jetzt machen:

- Das [RequireHttps]-Attribut in die Controller implementieren
- Im IIS eine https-Bindung erstellen
- Ein Zertifikat beziehen (hierfür habe ich das Tool https://certifytheweb.com/home/download gefunden) und auf dem IIS einrichten


Meine Fragen:

1.) Die RestApi wird von einer Android-App angesprochen, muss auf Client-Seite irgendwas gemacht werden, außer die RestApi mit https://....:Port anzusprechen?
2.) Auf dem Server laufen verschiedene RestApis mit unterschiedlichen Ports, kann ich für jede RestApi dasselbe zertifikat verwenden?
3.) Wie kann ich das Zertifikat mittels certifytheweb oder einem anderen Tool bekommen, ich kann bei dem Domänennamen keinen Port angeben. Keine RestApi läuft auf dem Server auf den Standardports 80/443.


Viele Grüße

fungi

Thema: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden
Am im Forum: Web-Technologien

Der Code oben funktioniert (auch) nicht bzw. er bewirkt nicht, dass das Zertifikat akzeptiert wird.

Das CAPI2-Log spuckt folgenden Fehler aus:

Fehler
- System

- Provider

[ Name] Microsoft-Windows-CAPI2
[ Guid] {5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}

EventID 11

Version 0

Level 2

Task 11

Opcode 2

Keywords 0x4000000000000003

- TimeCreated

[ SystemTime] 2018-02-12T20:01:26.031218800Z

EventRecordID 2688

Correlation

- Execution

[ ProcessID] 14476
[ ThreadID] 16288

Channel Microsoft-Windows-CAPI2/Operational

Computer mypc

- Security

[ UserID] S-1-5-21-849391721-3056917416-2997542074-1011


- UserData

- CertGetCertificateChain

- Certificate

[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company Ltd

ValidationTime 2018-02-12T20:01:26.031Z

- AdditionalStore

- Certificate

[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company Ltd


- ExtendedKeyUsage

- Usage

[ oid] 1.3.6.1.5.5.7.3.1
[ name] Serverauthentifizierung


- Flags

[ value] 0

- ChainEngineInfo

[ context] user

- CertificateChain

[ chainRef] {33CF4FEB-7DDD-4841-9187-DDB12366B2D5}
- TrustStatus

- ErrorStatus

[ value] 20
[ CERT_TRUST_IS_UNTRUSTED_ROOT] true

- InfoStatus

[ value] 100
[ CERT_TRUST_HAS_PREFERRED_ISSUER] true


- ChainElement

- Certificate

[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company Ltd

- SignatureAlgorithm

[ oid] 1.2.840.113549.1.1.5
[ hashName] SHA1
[ publicKeyName] RSA

- PublicKeyAlgorithm

[ oid] 1.2.840.113549.1.1.1
[ publicKeyName] RSA
[ publicKeyLength] 1024

- TrustStatus

- ErrorStatus

[ value] 20
[ CERT_TRUST_IS_UNTRUSTED_ROOT] true

- InfoStatus

[ value] 10C
[ CERT_TRUST_HAS_NAME_MATCH_ISSUER] true
[ CERT_TRUST_IS_SELF_SIGNED] true
[ CERT_TRUST_HAS_PREFERRED_ISSUER] true


- ApplicationUsage

[ any] true

- IssuanceUsage

[ any] true



- EventAuxInfo

[ ProcessName] xxxxxxxxx.exe

- CorrelationAuxInfo

[ TaskId] {D35E6EC8-9382-445D-9FD0-7811CE47DC86}
[ SeqNumber] 3

+ Result Eine Zertifikatkette wurde zwar verarbeitet, endete jedoch mit einem Stammzertifikat, das beim Vertrauensanbieter nicht als vertrauenswürdig gilt.

[ value] 800B0109



Ausgestellt wurde das Zertifikat von thawte, deren Rootzertifikate ich gerade alle mal installiert habe (auch ohne Erfolg)

Thema: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden
Am im Forum: Web-Technologien

Danke, ich habe das Zertifikat heruntergeladen und auf meinem PC installiert (für meinen lokalen Computer). Komischerweise kommt die Meldung trotzdem noch. Sehr seltsam

Edit: Die InnerException zeigt die Meldung "Das Remotezertifikat ist laut Validierungsverfahren ungültig." an.

Edit 2: Den Virenscanner (ESET) hab' ich auch komplett ausgeschaltet, der hat auch eine SSL-Prüfung. Bringt leider auch nichts.

Thema: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden
Am im Forum: Web-Technologien

Komme ich irgendwie an das Zertifikat oder muss ich dafür den Anbieter kontaktieren?

Thema: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden
Am im Forum: Web-Technologien

Hallo Leute,

ich habe die Aufgabe den Webservice (WSDL) eines Fremdanbieters anzusprechen (momentan noch die Test-Version die der Anbieter bereitstellt). Dabei bekomme ich immer die Meldung:

Fehler
Die zugrunde liegende Verbindung wurde geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden.

Daraufhin habe ich das ganze ohne SSL versucht:

            System.Net.ServicePointManager.ServerCertificateValidationCallback +=
            delegate (object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslError)
            {
                bool validationResult = true;
                return validationResult;
            };

Dann geht das System auf die http-Adresse, die es leider aber nicht gibt. Gibt es eine Möglichkeit diesen Fehler zu umgehen?


Gruß fungi35

Thema: Setter Injection bei MVVMLight
Am im Forum: GUI: WPF und XAML

Hallo Leute,

ich habe eine kurze Frage, auf die ich selber gerade keine Antwort finde:

Ich nutze MVVMLight und das darin enthaltene SimpleIoc für Dependency Injection. Bisher verwende ich ausschließlich Constructor Injection. Ich möchte jetzt auch Property Setter Injection verwenden. Kann es sein, dass das von Haus aus bei MVVMLight nicht unterstützt wird?


Danke & Gruß

fungi

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Hallo LaTino,

vielen Dank für die Anmerkung. Ich habe mir den Artikel durchgelesen. So richtig verstanden warum ich das nicht so machen sollte, wie ich es mache habe ich noch nicht. Könnt Ihr mir ggf. bitte nochmal auf die Sprünge helfen?

Zitat
One way to fix this is to separate the creation and scheduling of the task, e.g.


    Task t = null;
    t = new Task(() =>
    {
        …
        t.ContinueWith(…);
    });
    t.Start();


Das ist doch nichts anderes als mein Code, oder?

            Task<bool> task = new Task<bool>(() => SpeicherZahlungseingaenge(pZahlungseingaenge));
            task.ContinueWith(ZahlungseingaengeGespeichert, TaskScheduler.FromCurrentSynchronizationContext());
            task.Start();

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Hallo Sir Rufo,

welchen Vorteil gegenüber meiner Lösung hätte das?

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Zitat von MarsStein
hast Du schon mal in die Doku geschaut?

Jop, als erstes. Allerdings hab' ich es entweder überlesen oder falsch verstanden. Danke für die Aufklärung :)

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Hallo Leute,

ich habe folgendes Konstrukt:


            Task<bool> task = new Task<bool>(() => SpeicherZahlungseingaenge(pZahlungseingaenge));
            task.ContinueWith(ZahlungseingaengeGespeichert, TaskScheduler.FromCurrentSynchronizationContext());
            task.Start();


        private void ZahlungseingaengeGespeichert(object pResult, string pParameter1)
        {

        }


Kann ich der Methode ZahlungseingaengeGespeichert die mittels ContinueWith aufgerufen wird, zusätzlich, neben dem Task.Result, auch einen weiteren Parameter mitgeben? Oder muss ich mir eine entsprechende Klasse für das Task.Result erstellen?


Gruß fungi

Thema: RAM-Verbrauch bei JSON-Serialisierung großer Objekte optimieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke LaTino, das werde ich direkt ausprobieren :)

Thema: RAM-Verbrauch bei JSON-Serialisierung großer Objekte optimieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ja, das Programm ist im Drei-Schichten-Model umgesetzt. Der Datenbankzugriff ist komplett von der UI getrennt.


Es wäre trotzdem nicht so leicht, das ganze auf Datenbank-Transaktionen umzustellen:

- Ein Auftrag wird geladen
- Die Positionen werden geladen (es geht in diesem Thread um die Bearbeitung der Positionen)


Auf DB-Transaktionen umzustellen würde bedeuten, dass beim Starten der Bearbeitung einer Position eine Transaktion gestartet würde, alle Änderungen die an der Position gemacht werden direkt in die Datenbank übernommen werden müssten und die Transaktion anschließend mittels COMMIT oder ROLLBACK beendet werden würde.
Mal angenommen, der Benutzer verwirft seine Änderungen und die Transaktion wird zurückgenommen, dann müsste man auch die Daten der Position aus der Datenbank neu laden, was wiederum auch keinen Geschwindigkeitsvorteil bringen würde. Desweiteren würden wir die Fähigkeit verlieren, das alle Änderungen NICHT übernommen werden, wenn man den gesamten Vorgang (in dem die Positionen enthalten sind) abbricht.

Thema: RAM-Verbrauch bei JSON-Serialisierung großer Objekte optimieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das ganze auf Datenbank-Transaktionen umzustellen kommt erstmal nicht in Frage, weil der Aufwand dafür viel zu hoch wäre.

Thema: RAM-Verbrauch bei JSON-Serialisierung großer Objekte optimieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Über die Serialisierung wird im Prinzip eine Objekt-Transaktion implementiert.
Beim Starten der Bearbeitung wird das Objekt serialisiert, beim Abbrechen der Bearbeitung wird es wieder deserialisiert und somit in seinen alten Zustand versetzt. Das dauert auch teilweise einen Moment, was ich auch gerne verbessern würde weil es die Usability und den Arbeitsfluss stört.

Ich hatte auch schon darüber nachgedacht, das ganze per Stream direkt in eine Datei zu schreiben und mir so den Weg über den riesigen String im Speicher zu sparen. Da stellte sich mir aber die Frage, ob diese Vorgehensweise die Performance wegen des Festplattenzugriffs nicht verschlechtern würde...

Zitat von gfoidl
Sonst kannst du dir überlegen ob du nicht in andere Formate serialisiert, die besser für große Datenmengen geeignet sind.
Wenns rein .net ist, so kannst du auch binäre serialisieren.
Sonst schau dir Google Protobuf an.

Google Protobuf sieht sehr interessant aus. Meinst Du, das könnte für meinen oben beschriebenen Anwendungsfall eine gute Anwendung sein?

Welche Vorgehensweise macht generell Sinn, wenn man große Inhalte "zwischenlagern" möchte, ohne das die Anwendung irgendwann einen sehr hohen Speicherverbrauch hat?

Thema: RAM-Verbrauch bei JSON-Serialisierung großer Objekte optimieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Leute,

ich muss ein sehr großes Objekt (mit vielen enthaltenen Listen und weiteren Objekten) serialisieren und im Programmverlauf wieder deserialisieren (dieser Vorgang wird oft ausgeführt). Momentan wird das Objekt in einen JSON-String (Newton) serialisiert. Es scheint so, bzw. ich habe beobachtet, dass das ganze auf Dauer sehr RAM-intensiv ist.

Ist es so, dass ständiges bilden großer Strings (nichts anderes macht die Serialisierung in diesem Fall ja) viel RAM verbraucht? Kann man die Serialisierung und Deserialisierung großer Objekte auch so gestalten, dass nicht viel RAM für das Serialisieren des Objekts (= bisherige String-Serialisierung) verbraucht wird?

Sorry, wenn ich mich zu kompliziert ausgedrückt habe ;)


Gruß fungi

Thema: Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke, ich konnte das Problem mittels Änderung der .config lösen :)

Thema: Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Leute,

ich verzweifle gerade an folgendem Problem:

Ich muss den E-Mail-Client Tobit aus unserer Software heraus ansteuern. Das klappt soweit auch und war problemlos umzusetzen. Für die Ansteuerung wird die COM-DLL "DvApi32.DLL" vom Hersteller benötigt. Die DLL wird mit dem E-Mail-Client auf den Rechnern installiert.
Ich habe die DLL ebenfalls auf meinem Rechner (auch registriert) und habe diese über Verweise in unser Projekt eingebunden.


Das eigentliche Problem:

Bei der Ansteuerung des E-Mail-Clients erhalte ich auf dem Kundenrechner folgende Fehlermeldung:

Fehler
Die Datei oder Assembly "Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)

Die DLL "Interop.DvApi32.dll" liegt im Verzeichnis wo auch die EXE unserer Anwendung liegt. Die Anwendung ist signiert (strong name) und mit Any CPU kompiliert.
Testweise habe ich mal ein Testprojekt mit der Ansteuerung erstellt, welches unsigniert ist. Das Testprojekt läuft auf dem Kundenrechner ohne Schwierigkeiten.


Ich habe auch schon das Logging des Assembly-Binders aktiviert, werde aber nicht schlau daraus. Was mir auffällt ist, dass eine unsignierte Version der DLL im Log aufgeführt wird.

Fehler

*** Protokolleintrag für Assembly-Binder (19.06.2017 @ 21:34:16) ***

Fehler bei diesem Vorgang.
Ergebnis der Bindung: hr = 0x80131040. Keine Beschreibung vorhanden.

Der Assemblymanager wurde geladen aus: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Als EXE-Datei ausgeführt. C:\software\software\Application\vertrieb.exe
--- Ein detailliertes Fehlerprotokoll folgt.

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
(Fully-specified)
LOG: Appbase = file:///C:/software/software/Application/
LOG: Ursprünglicher PrivatePath = NULL
LOG: DynamicBase = NULL
LOG: CacheBase = NULL
LOG: AppName = vertrieb.exe
Aufruf von Assembly : (Unknown).
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\software\software\Application\vertrieb.exe.Config
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet.
LOG: Verweis nach der Richtlinie: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
LOG: Die Suche im GAC war nicht erfolgreich.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32.DLL.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32/Interop.DvApi32.DLL.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: C:\software\software\Application\Interop.DvApi32.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.

ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Die von der Quelle ausgeführte Setup-Phase schlug mit hr = 0x80131040 fehl.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.

*** Protokolleintrag für Assembly-Binder (19.06.2017 @ 21:34:16) ***

Fehler bei diesem Vorgang.
Ergebnis der Bindung: hr = 0x80131040. Keine Beschreibung vorhanden.

Der Assemblymanager wurde geladen aus: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Als EXE-Datei ausgeführt. C:\software\software\Application\vertrieb.exe
--- Ein detailliertes Fehlerprotokoll folgt.

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
(Fully-specified)
LOG: Appbase = file:///C:/software/software/Application/
LOG: Ursprünglicher PrivatePath = NULL
LOG: DynamicBase = NULL
LOG: CacheBase = NULL
LOG: AppName = vertrieb.exe
Aufruf von Assembly : (Unknown).
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Die Anwendungskonfigurationsdatei wird verwendet: C:\software\software\Application\vertrieb.exe.Config
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet.
LOG: Verweis nach der Richtlinie: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=96036d4381770532
LOG: Die Suche im GAC war nicht erfolgreich.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32.DLL.
LOG: Download von neuem URL file:///C:/software/software/Application/Interop.DvApi32/Interop.DvApi32.DLL.
LOG: Der Assembly-Download wurde durchgeführt. Datei-Setup wird begonnen: C:\software\software\Application\Interop.DvApi32.dll.
LOG: Die von der Quelle ausgeführte Setup-Phase beginnt.
LOG: Der Assemblyname ist: Interop.DvApi32, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: PUBLIC KEY TOKEN.
ERR: Der Assemblyverweis entsprach nicht der gefundenen Assemblydefinition.
ERR: Die von der Quelle ausgeführte Setup-Phase schlug mit hr = 0x80131040 fehl.
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet.



Gruß fungi

Thema: Muss ich bei Windows Forms alle Controls auf der Form explizit disposen mittels Dispose()?
Am im Forum: GUI: Windows-Forms

Hallo Leute,

ich habe folgende Frage: Muss ich bei Windows Forms alle Controls auf der Form explizit disposen mittels Dispose()?

Ich habe folgende Dispose-Implementierung in der Form:


        public void Close()
        {
            ((IDisposable)this).Dispose();
        }

        void IDisposable.Dispose()
        {
           this.Dispose(true);
           GC.SuppressFinalize(this);
        }

        ~ViewDruckSelektion()
        {
            this.Dispose(false);
        }

        public void Dispose (bool pDisposing)
        {
            if (pDisposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }

            // Hier die unverwalteten Ressourcen freigeben
            base.Dispose(pDisposing);
        }


Regelt components.Dispose(); den Dispose()-Aufruf für alle in der Form enthaltenen Komponenten?


Gruß fungi

Thema: Wie kann man eine foreach-Schleife verkürzen?
Am im Forum: Grundlagen von C#

Zitat von witte
... und warum artikel.GetExportObject() nicht gleich ein ModelExportArtikel liefert.

Weil das Interface nicht generisch ist, das wird gleich noch geändert :)

Thema: Wie kann man eine foreach-Schleife verkürzen?
Am im Forum: Grundlagen von C#

Zitat von Abt

 retVal.Artikel = this.Artikel.Select(artikel.GetExportObject() as ModelExportArtikel).ToList();

Perfekt, danke :)

Thema: Wie kann man eine foreach-Schleife verkürzen?
Am im Forum: Grundlagen von C#

Hallo Leute,

gibt es einen Weg diese Codezeilen zu verkürzen:


            foreach (ModelArtikel artikel in this.Artikel)
            {
                retVal.Artikel.Add(artikel.GetExportObject() as ModelExportArtikel);
            }



Gruß fungi

Thema: Telerik SaveLayout() speichert nach Aktualisierung leere Datei, funk. aber auf neuem GridView
Am im Forum: GUI: Windows-Forms

Ich hab's mit Hilfe des SourceCodes der Telerik-Controls herausgefunden. Glücklicherweise steht dieser als zahlender Kunde zum Download zur Verfügung

Thema: Telerik SaveLayout() speichert nach Aktualisierung leere Datei, funk. aber auf neuem GridView
Am im Forum: GUI: Windows-Forms

Hallo Leute,

ich habe ein Problem, bei dem ich gerade überhaupt nicht weiter komme.

Wir verwenden die Windows Forms-Controls von Telerik in unserem Projekt. Darunter auch das GridView von Telerik. Um auf dem aktuellen Stand zu bleiben haben wir die Version der Telerik-Komponenten von einer zwei Jahre alten Version auf die aktuellste Version aktualisiert.

Leider musste wir feststellen, dass eine Funktion in unserem bestehenden Projekt nicht mehr funktioniert. Unter anderem bietet das GridView von Telerik eine Methode zum Speichern des Layouts (SaveLayout()). Bei allen bestehenden GridViews funktioniert diese Methode nicht mehr, d. h. es wird nur noch eine leere Datei geschrieben.

Das kuriose ist, dass die Methode einwandfrei funktioniert wenn ich:

- Ein bestehendes GridView woanders hin kopiere (z. B. auf eine andere Form). Auf der neuen Form funktioniert SaveLayout() dann wie gewünscht. Auf der alten Form weiterhin nicht.
- Ein neues GridView einfüge (egal wo).


Meine eigentliche Frage:

Gibt es evtl. eine Art Cache den ich leeren muss? Projekt bereinigt und neu erstellt habe ich mehrfach gemacht. Auch den bin-Ordner habe ich bereits gelöscht und das Projekt neu erstellt.


Gruß fungi