Ich hab mal folgendes probiert:
Ich habe ein Programm erstellt mit einem DataSet und einem DataGrid. Wenn man per OpenFileDialog die XML Datei ausgewählt hat wird DataSet.ReadXml() ausgerufen und dann DataGrid.DataSource = DataSet;
Dann funktioniert es, obwohl ich das schonmal probiert habe und es funktionierte nicht...
...ich bin verwirrt...
Also ich würde meinen:
Sobald eine Applikation gestartet wird (erster User stellt Request), wird der aspnet_wp.exe (Worker Process) gestartet und für die Assembly eine AppDomain bereitgestellt. Das Framework verwaltet einen Thread-Pool. Jeder Thread erzeugt ein HttpApplication Objekt (ebenfalls gepoolt) und die Module (auch gepoolt). Dann wird der Handler aufgerufen und der Response erezugt.
Jeder Thread legt einen eignen Stack an, aber die statischen Variablen liegen im Daten-Speicherbereich der AppDomain und sind somit "threadübergreifend" definiert und leben über die gesamte Dauer der Applikation. Ich habe es getestet (z.B. mit einer Counter-Variablen, die pro Request um eins erhöht wird und auf die Seite geschrieben wird). Das funktioniert, als ob ich die Variable in das HttpApplicationState Objekt eingebettet hätte.
ja, aber warum wird sie bei B b = new C(); b.method(); aufgerufen? B redefiniert ja method nicht neu, also müsste es doch so ablaufen:
er schaut in C, findet keine methode method -> geht nach B, findet wieder keine -> geht nach A und dort findet er sie.
Aber er gibt ja B.method aus, obwohl method nicht überschrieben wurde. wieso?
Das Problem ist, dass VisualStudio mich nicht an die DesignMode property ran lässt wenn es ein PocketPC Projekt ist, da hilft auch bedingte Kompilierung nichts.
@AndreasW,
danke für die Infos.
So, wie du es beschreibst, hatte ich es nicht vor. Das Windows Sicherheitssystem will ich natürlich nicht aushebeln. Dann könnte ich ja auch die Boot.ini entsprechend konfigurieren.
Der Benutzer, dessen Konto ich verwenden wollte, ist natürlich auf dem System bekannt und hat auch die entsprechenden Rechte.
Komisch ist halt nur, dass es klappt: Wenn User1 angemeldet ist, kann ich den Prozess mit den Konto Daten von User2 starten, aber leider nicht wenn dieser Prozess von einem Dienst gestartet wird.
Es ist halt etwas komplizierter geworden seit SP2. Werde mich mal mehr mit DotNet Security beschäftigen (strong name, CAS, usw.).
WorstCase
Danke für die Antworten.
Nicht der Resize-Mechanismus ansich ist zu aufwändig, sondern einer meiner Implementierungen. Ein UserControl zeichnet mit GDI+ und updated sich, wenn es in der Größe geändert wird. Und das ist aufwendig....
Ich kann leider keinen Unterschied zwischen SizeChanged und Resize erkennen. Beide kommen immer hintereinander.
Und MouseDown/Up klappt nicht. Man bekommt kein Event, wenn man den Rahmen anklickt
Ich habe einen Workaround mit einem Timer. Ich starte im OnResize den Timer jedes mal neu. Im Tick-Eventhandler wird dann das Neuzeichnen mit GDI+ ausgeführt. Das klappt, ist aber sicherlich nicht das eleganteste...
eigentlich ist es besser die initialisierung und verarbeitung der Daten im Formular selbst zu machen.
Wenn daten für das Formular notwendig sind, dann übergebe diese im Konstruktor.
Dort verarbeite sie.
Wenn du Daten wieder abfragen willst, füge den Formular eine entsprechendes Property oder Methode hinzu.
Beispiel:
public partial class DialogToDisplaySomething : Form
{
public string SelectValue
{
get
{
if (listBox1.SelectedIndex == -1)
return String.Empty;
return listBox1.SelectedItem.ToString();
}
}
public DialogToDisplaySomething(List<string> availableValues)
{
InitializeComponent();
listBox1.DataSource = availableValues;
}
}
der aufruf würde dann so aussehen:
public string DisplayValues()
{
List<string> availableValues = new List<string>();
availableValues.Add("Hello");
availableValues.Add("guys");
DialogToDisplaySomething f = new DialogToDisplaySomething(availableValues);
if (f.ShowDialog() == DialogResult.OK)
return f.SelectValue;
return String.Empty;
}
das ist dann etwas besser gekapselt und du machst keine Formulare von den Inhalten in den Klassen abhängig.
Auf diesen Formular ist nun eine Listbox drauf. Was ist, wenn dein Chef ankommt, und möchte dort gerne eine ComboBox haben.
Im beispiel von hilf sähe das so aus, dass man alle aufrufe des Formulars ebenfalls ändern muss. In meinem Beispiel spielt die Art und Weise der Anzeige keine Rolle.
AndreasW schrieb:
wenn du ein vorhandenen Webservice ansprechen willst, brauchst du ja nur ein Proxy zu generieren.
Die WSDL ist der Vertrag zwischen Webservice und aufrufende Anwendung. Was du machen musst, ist diesen Vertrag in Code umzusetzen. Dafür gibt es Tools.
WSDL.exe ist dafür bestens geeignet.
Diesen Proxy bindest du bei dir im Projekt ein und setzt dann nur noch die URI zum Service.
Im Buch won MicrosoftPress werden diese Tools auch noch erklärt.
ChrisPlusPlus schrieb:
Hallo!
unsafe
{
Point myPoint = new Point(1, 1);
void* myFirstPointer = &myPoint;
Point ret = (Point)myFirstPointer; // das und viele andere varianten
// schlagen fehl ...
}
Weiß jemand, wies richtig geht, oder bin ich mit dem void* auf dem falschen Dampfer?
Ja, du bist mit void aufm falschen Dampfer
unsafe
{
Point myPoint = new Point(1, 1);
Point* myFirstPointer = &myPoint;
Point ret = *myFirstPointer;
}
Hallo!
this.SetStyle(ControlStyles.UserPaint, true);
funtioniert wenn man ein Projekt vom Typ Windows-Anwendung hat.
Bei dem von mir verwendeten Projekttyp für Geräteanwendungen
gibt es jedoch den Kompilerfehler:
Keine Definition für SetStyle gefunden.
Weiß jemand, ob es eine vergleichbare Methode für Geräteanwendungen
gibt?
Bye, Lothar.