Danke für die Hilfe! Ich habe mich jetzt ein bisschen tiefer in die Thread Klasse eingegraben und habe die Methode Abort() gefunden, diese löst die von dir angesprochene Exception aus und beendet den Thread sofort.
Wie Noodles es sagt, der die Runtime nicht hat, muß er die installieren und kann dann dein Programm starten...
Du kannst die mitliefern mit deinem Programm.
Ich hab mich jetzt dazu entschlossen, eine zwangsweise maximierte Form mit BorderStyle 'None' zu benutzten, die an sich komplett unsichtbar ist. Die Toolbar, die ich eigentlich anzeigen will hat dann halt eine andere Hintergrundfarbe und ist links / rechts / ... an der Form angedockt.
Läuft ja aber prinzipiell in die gleich Richtung wie dein Vorschlag :D.
Thx nochmal und bis bald!
Ogridi
Warum denn nicht so?
enum WERTE {
A = 0x00000001
, B = 0x00000010
, C = 0x00000100
, D = 0x00001000
, E = 0x00010000
, F = 0x00100000
, G = 0x01000000
, H = 0x10000000 };
int speicher = 0;
// A und B setzen:
speicher |= A;
speicher |= B;
// Ist A gesetzt?
if(speicher & A) == A) {
// Ja, A ist gesetzt.
// Jetzt löschen wir A wieder
speicher &= ~A;
}
War misverständlich von mir. Du kannst im Debugger IDs vergeben (Rechtsklick -> make object id). Ob sich die IDs unterscheiden könntest du aber auch immer recht schnell sehen, wenn du sowas wie object.ReferenceEquals(a, b) auf die Watchlist tust.
Weil man auf die einfachsten Lösungen immer zuletzt kommt ;), und weil Du im C++ mit Zeigern arbeiten kannst ;).
Rein Theoretisch wäre es bei einem Modalen Aufruf sogar über return Funktion möglich. Wenn man aus der zweiten Form Klasse den Aufruf ShowDialog überläd (bzw. wenn Du keine Paramete Liste angibst, wirst Du das normale Show Dialog verdecken), und dann statt einem Void einen Integer "ShowDialog" erzeugt. Dann kann man sich sogar diese öffentliche Variable sparen. Du kannst aber auch einen Alternativen ShowDialog erzeugen (z.B. ShowDialogInt). Würde im C# ungefähr so aussehen.
//zusätzliche Funktion in der Klasse des aufzurufenden Dialogs (Form2)
public int ShowDialogInt()
{
this.ShowDialog();//erst wenn der Dialog geschlossen wird, springt er weiter zum "return"
return testVar;
}
Und der Aufruf der Funktion würde so aussehen. Damit kannst Du Dir sogar eine instanzierte Variable sparen
//Kurze Schreibweise
public void Button1Click(object o, SystemEventArgs e)
{
this.myTargetVar = (new Form2()).ShowDialogInt();
}
//In der Normalform sieht das so aus :)
public void Button1Click(object o, SystemEventArgs e)
{
Form2 testForm = new Form2();
this.myTargeVar = testForm.ShowDialogInt();
}
Gruß
Markus Seidl
Benutz Doch mal Setup - Project
oder
Setup - Wizard <---- dieser nimmt dir bestimmt nen paar Schritte ab
(Benutzerführung)
Ich denke man sollte hier mal nach TRY/ERROR vorgehen. Und dann installier deine Software mal auf nen Rechner wo Du weisst das die SDK fehlt! Wenns klappt
weisst Du auch wie du ein Setup - Projekt durchführst! Versprochen!
mfg
Hab mir mal ne Form erstellt wo es ein Textfeld gibt wo man den URL ner Seite
eintragen kann dann noch nen Button wo man die Internetseite laden kann!
Sowie ein MultLine - TextBox wo man die Daten der InternetSeite anzeigen kann!
Die CallBack - funktion des Buttons der die Seite lädt und den Inhalt in die MultiLine - TextBox kopiert sieht so aus!
private void btnLoadURL_Click(object sender, System.EventArgs e)
{
if(txtURL.Text.Length != 0)
{
Uri myUri = new Uri(txtURL.Text);
// Create a 'HttpWebRequest' object for the specified url.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
// Send the request and wait for response.
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
{
StreamReader streamReader = new StreamReader(myHttpWebResponse.GetResponseStream());
while(streamReader.Peek() >= 0) // ist noch ein leesbares zeichen im Stream
{
txtHTMLFile.Text = txtHTMLFile.Text + streamReader.ReadLine();
}
}
// Release resources of response object.
myHttpWebResponse.Close();
}
Jetzt könnte man diesen String über Reguläre ausdrücke auf die gewünschten Währungen hin untersuchen dazu gibt im .NET - Framework ne Klasse
dazu um die zu verwenden zu können musst Du ne using - Klausel einbinden
using System.Text.RegularExpressions;
Guck mal in der MSDN - Hilfe unter Regex
Dann kannst Du auch das mit deinem Einheitenrechner lösen
mfg sclearscreen
P.S.: Will Dir nicht alle Arbeit abnehmen oben muss ausserdem aum die Schleife
noch nen try{....}catch(...){...} - Block drumherum, Such Dir das aber mal alles selbst zusammen das bringt Erfahrung mit .NET - Framework
Oben in meinen Posting wo ich aus der Datei lesen!
Da muss noch nen
try
{
while((zeile=streamReader.ReadLine()) != false)
{
.
.
.
}
}
catch(OutOfMemoryException noMemory)
{
.
.
.
}
catch(IOException ioException)
{
.
.
.
}
drumrum da ReadLine laut MSDN - Hilfe ne oder 2 Exception werfen kann
gib einfach mal in der Hilfe ReadLine ein und guck dann bei den Hilfetreffern unter StreamReader.ReadLine-Methode
Schaud dort mal den Abschnitt Ausnahmen an!!!
mfg sclearscreen
P.S.: Sichere Software muss soviele Fehler wie möglich sicher händeln können
und stabil bleiben
Wies aussieht arbeitet also dieser Provider so wie ich schon in meinen anderen Posting davon geredet habe. Naja Hauptsache der Funke ist bei Dir übergesprungen und du strotzt bzw. sprühst vor Ideen bei deinem Programm. Siehste und ich konnte auch gleich wieder was Neues dazulernen is doch schön son Forum
mfg sclearscreen
Das war doch bei VS 2002 auch schon so. Einige Sachen (vermutlich primär GUI-Zeugs) werden in C# und VB geschrieben, andere Dinge (wie z.B. der C# und C++ Compiler) in C++. Ich habe aber keine genaueren Informationen, was jetzt mit welcher Sprache realisiert ist.
Kann zur Zeit leider nicht selbst nachschauen, aber
du kannst dir mal den BitTorrent Code anschauen.
Ich meine dort wird auch mit Binaer-Uebertragung gearbeitet...
http://sourceforge.net/projects/bittorrentnet/
Helium schrieb:
override sagt, dass die Methode, die du gerade schreibst die gleichnamige au der Basis-Klasse überschreibt.
new sagt, dass die Methode zwar den selben Namen hat, wie die aus der Basis-Klasse, diese aber dennoch nicht überschreibt.
class Basis {
public virtual void foo () { System.Console.WriteLine ("Basis.foo"); }
public virtual void bar () { System.Console.WriteLine ("Basis.bar"); }
}
class Derivat : Basis {
public override void foo () { System.Console.WriteLine ("Derivat.foo"); }
public new void bar () { System.Console.WriteLine ("Derivat.bar"); }
}
...
Basis referenz = new Derivat();
referenz.foo(); // wurde überschrieben => "Derivat.foo"
referenz.bar(); // wurde nicht überschrieben => "Basis.bar"
Wobei man noch anmerken sollte, dass du auch hierbei die Moeglichkeit hast, die Basisfunktion aufzurufen:
class Derivat : Basis {
public override void foo () {
System.Console.WriteLine ("Derivat.foo");
base.foo();
}
public new void bar () {
System.Console.WriteLine ("Derivat.bar");
base.bar();
}
}
...