AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen .NET-Sprachen Prism .Net WinForms - NULLPointer Exception beim Methodenaufruf
Thema durchsuchen
Ansicht
Themen-Optionen

.Net WinForms - NULLPointer Exception beim Methodenaufruf

Ein Thema von jensw_2000 · begonnen am 27. Feb 2014 · letzter Beitrag vom 27. Feb 2014
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

AW: .Net WinForms - NULLPointer Exception beim Methodenaufruf

  Alt 27. Feb 2014, 18:23
Ja, C# kann Formulare malen und Oxygene auch. Der IL Code war nicht das Problem.
Naja .. eigentlich doch .. ziemlich genau war es das sogar .. ganz alleine
Das ich mein erster WinForms "Test", er auch für andere .Net "Lernsachen" herhalten muss.
Später werden ich den ganzen UI Kram aber auch vorrangig mit C# machen, weil es in der DevExpress Universal Subscription keine Oxygene Projektvorlagen gibt und XAF auch nur C# und VB kann.

Ich habe jetzt aber herausgefunden was ich genau vermasselt habe .
Hätte ich die paar übrigen "Variablendeklarationen" bei dem geposteten Beispielcode vorhin mal nicht weggemacht. Die waren doch wichtig.

So etwa sah das vorhin wirklich aus.
Delphi-Quellcode:
method TMainform.irgendwas;
begin
  MessageBox.show('ich bin nie zu sehen, weil Mainform.irgendwas garnicht aufrufbar ist');

  if fNextUpdateServerSersion > DateTime.Now then exit;

  var lServerVersionInfo:TServerVersionInfo;
  var lSucceeded:Boolean;

  // und zwar deshalb ...
  var lResponse: future TResponse := (async (CommonServiceClient.GetServerVersion(lServerVersionInfo)));

  if assigned(await lResponse) then begin
    //lSucceeded := lResponse.ReturnCode = TReturnCode.rcOK;
    //self.lblServerVersion.Text := if lSucceeded then lServerVersionInfo.VersionString else lResponse:Description;
    //fNextUpdateVersion := if lSucceeded then DateTime.Now.AddSeconds(90) else DateTime.Now.AddSeconds(2);
  end;
end;
Das "FUTURE" "ASYNC" "AWAIT" Konstrukt spaltet ein Task ab, die CommonClient.GetServerVersion parallel ausführt ohne das Mainform zu blockieren, und dann wieder ein im Kontext des UI Thread terminiert. Soweit die Theorie.

In der Praxis ist der "CommonServiceClient" ein Member von Mainform.
Und im Video2Brain Kurs "Multithreading mit .Net" hatte der Typ das sogar gesagt .. .
Man kann in Tasks "problemlos" auf außenliegende Variablen zugreifen kann, muss aber aufpassen, weil der IL_CODE dadurch STARK verändert wird. Die außen liegenden Variablen werden im IL Code zu Public Membern des "Task Threads" und liegen dann gar nicht mehr wirklich "außen". Das sieht man nur nicht im C# oder Pascal Code.

Unter dem Strich habe ich also eine Methode aufgerufen, die einen IL Code ausgeführt hat, welcher meine MainForm Instanz in einen Task Context gezogen hat, dessen Task aber noch garnicht instanziert war.
Resultat - MainForm weg und NullPointer Exception gerechtfertigt und die Nacht umsonst durchgesucht ...

Geändert von jensw_2000 (27. Feb 2014 um 18:34 Uhr)
  Mit Zitat antworten Zitat
michaelthuma
(Gast)

n/a Beiträge
 
#2

AW: .Net WinForms - NULLPointer Exception beim Methodenaufruf

  Alt 27. Feb 2014, 20:44
Soweit funktioniert Oxygene schon. Gewöhne dich an die Nächte. Die sind alle gesessen Und du wirst alle seit .net 1.1 nachsitzen. Es gibt viele Gewohnheiten die der .net Mensch mit den Jahren vermeidet. Aber das ist überall so.

Mein Zugang war damals über Sharpdevelop und dem Source der IDE. Das ist lehrreich. Bei Devexpress kommst du C# sowieso nicht aus und auch die ganzen anderen Generator fokusierten Ansätze. Devexpress .net ohne XAF ist nicht der Heuler. Das ist auch eher eine eigene Welt über .net drübergestülpt. Das hat CASE Tool level.

Ja, C# kann Formulare malen und Oxygene auch. Der IL Code war nicht das Problem.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz