Hallo,
bzw. für die Ausgabe die DateTime.ToString Methode (String) in Zusammenhang mit Benutzerdefinierte und DateTime-Formatzeichenfolgen
Gruß, MarsStein
Hallo kaosz,
Mit der clientseitigen ID kannst Du serverseitig nicht suchen.
Du musst - ähnlich wie im Link von Diräkt - das Control im entsprechenden Item der DataList suchen, und dann über FindControl("SparteLink")
.
Das richtige Event dafür wäre im Falle einer DataList ItemDataBound
. Dort musst Du die Items richtig identifizieren, dsa Control wie erwähnt suchen, und kannst dann die CssClass entsprechend setzen.
Gruß, MarsStein
Hallo,
Was für ein Typ ist $CourbeOr Naja, sieht stark nach einem Array aus (das hier ausschliesslich Integer-Werte enthält - was ja bei PHP nicht selbstverständlich ist). Bei der Art wie es befüllt wird, würde ich in C# wohl eine
List<int>
draus machen - aber Achtung, es fehlt ein Wert mit dem Index 0, dann musst Du entwder einen Dummywert an den Anfang der Liste hängen, oder beim Zugriff den Index um 1 verschieben. Ggf. fährst Du mit einemDictionary<int, int>
noch besser, dann kannst Du's genauso wie im PHP-Code machen.
und wird er zwischendurch geändert?
Nein, sieht nicht so aus. Wie kommst Du darauf?
Gruß, MarsStein
Hallo,
ja, in der Tat...
Habe eben mal mit Firebug in die Quellen geschaut - diejenigen davon, die mit HTML-FileUploads arbeiten, gehen auch dern Weg mit dem Opacity-Trick, der auch im Link aus meinem Edit benutzt wird.
Alle anderen benutzen Browser-Plugins wie Flash/Java/Silverlight.
Wie gesagt, ganz trivial ist es nicht - wobei sich die jQuery-Sachen natürlich schon leicht einbinden lassen.
Gruß, MarsStein
Hallo,
Was würdet ihr da denken und(oder empfehlen? Dass es stark von der Art des Projektes und der Zielgruppe abhängt. Wenn Du willst, dass möglichst viele User das Projekt nutzen können, wäre eine HTML-basierte Lösung sicher die bessere Wahl, da Silverlight nicht jedem zur Verfügung steht (z.B. auf anderen Plattformen als Windows, oder Leute die kein Silverlight installiert haben / installieren wollen). Wenn Dich das nicht kratzt, kannst Du IMO genausogut mit Silverlight loslegen. Hängt aber wie gesagt m.E. auch stark davon ab, was Du in Deinem Projekt realisieren willst.
Gruß, MarsStein
Hallo zusammen,
@Abt
für so simpel halte ich das gar nicht... schließlich muss das Control auf das Dateisystem des Benutzers zugreifen, damit die Datei hochgeladen werden kann, und das geht aus dem Browser IMO nur durch ein <input type="file">
. Dieser ist jedoch sehr restriktiv. Wie man an den Button-Text kommen soll, wüsste ich jetzt nicht 🤔
Und das Upload-Control verstecken und nachbauen, um dann den Text per Javascript zu setzen, geht meines Wissens auch nicht, da das (HTML-seitige) Control kein setzen des Wertes aus Scripten zulässt.
Also ohne Java, Flash oder ähnliches halte ich das für nicht machbar, den <input type="file"> stellt jeder Browser halt "as is" zur Verfügung.
Ich lasse mich aber gerne eines besseren belehren.
Gruß, MarsStein
Edit: es gibt ja immer findige Leute, die's dann doch schaffen (funktioniert in den gängigen Browsern, aber nicht in allen, weil nicht das input-Feld selbst geändert, sondern getrickt wird - und ganz trivial ist es auch nicht): Styling an input type="file"
Hallo thetruedon,
hast Du den Tipp von AlfAtor mit dem Virenscanner mal ausprobiert? Die kriechen ja bei Zips je nach Einstellung rein und durchsuchen die Inhaltsdateien, das könnte schon ein echter Grund sein.
Gruß, MarsStein
Hallo,
ich weiss es leider auch nicht - aber gefühlsmäßig würde ich auf den "Plug and Play" Service tippen. Der käme IMO am ehesten dafür in Frage.
Gruß, MarsStein
Hallo,
mit dem <%=txtSucheKontakte.Text%> wird der Text eingesetzt, der zum Zeitpunkt der Erstellung der Seite auf dem Server in der Textbox steht. Da ist diese aber vermutlich noch leer.
Du musst das schon clientseitig per Javascript machen, wenn der Wert nicht zwischendrin an den Server gepostet wird.
Beispiel:
<a onclick="window.location.href = 'About.aspx?Suche=' + document.getElementById('txtSucheKontakte').value + '&In=Kontakte'">klick</a>
Gruß, MarsStein
Das sind aber Grundlagen der Webprogrammierung, bitte beachte [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1
Hallo,
am einfachsten ist es wahrscheinlich, pro Bestellung eine eigene GridView zu erstellen.
Gruß, MarsStein
Hallo,
das Encoding im Body wird nur benutzt, wenn Du die Message auch tatsächlich von .NET aus abschickst. Die Property an sich ist aber einfach nur Text und damit 16bit-Unicode.
Probier mal mit
Message.Body += "Einheit: " + Server.HtmlEncode(einheit) + "\n"; // <-- \n weil später noch URL codiert wird
und dann beim StringBuilder:
sb.Append("document.location.href =\"mailto:test1@test.de?cc=test2@test.de;test3@test.de&subject=Registrierung&body=" + HttpUtility.UrlEncode(Message.Body) + "\";");
Gruß, MarsStein
Hallo,
aber hoffe, dass die Frage nicht zu trivial ist
Ist sie eigentlich schon. RegistryHive
ist einfach nur ein enum
und lässt sich als solcher aus einem String mittels Enum.Parse()
gewinnen:
RegistryHive myHive = (RegistryHive)Enum.Parse(typeof(RegistryHive), myString);
Wahrscheinlich hast Du viel zu speziell nach Registry-Zeugs gesucht. Eine Suche bei Google mit "enum aus string c#" liefert übrigens bereits in den ersten Treffern brauchbare Ergebnisse.
Gruß, MarsStein
Hallo,
zunächst mal: ich weiss es auch nicht genau.
Aber ich kann mir vorstellen, dass im Umfeld mobiler Geräte da schon ein erheblicher Unterschied besteht, da bei diesen nicht davon auszugehen ist, dass eine ständige und/oder stabile Verbindung besteht. Solche Geräte gehen ja oft nur bei Bedarf ins Netz, und der Aufbau der Verbindung kann schon mal etwas dauern. Auch und gerade weil solche Mobilverbindungen nicht immer die schnellsten/stabilsten sind, wird hier vermutlich anders verfahren als bei den PC-Betriebssystemen. Es wäre ja für viele Anwendungsfälle fatal, wenn direkt abgebrochen würde, obwohl der Server vielleicht einige Sekunden später erst / erst wieder zur Verfügung steht.
Gruß, MarsStein
Hallo,
Buffert EndRead nicht irgendwo selbst?
nein, das musst Du Dich selbst drum kümmern. Steht auch in NetworkStream.BeginRead-Methode unter Hinweise.
Gruß, MarsStein
Hallo,
Wenn man die Debugfunktion nutzt dann kommt man da auch von selbst drauf, ...
...weshalb man die auch immer nutzen sollte, bevor man eine Frage ins Forum stellt 😉
if (IsPostBack != false)
ist übrigens eine ganz grauselige Schreibweise. Ein einfaches if(IsPostBack)
macht genau das selbe und ist einfacher lesbar. Siehe auch [Tipp] Anfängerfehler == true / == false .
Bitte beachte auch [Hinweis] Wie poste ich richtig? 1.1 un d1.1.1
Gruß, MarsStein
Hallo,
sowas machst Du am besten rekursiv. Hier findest Du ein entsprechendes Snippet:
Für alle die, die mit der FindControl Methode nicht zufrieden sind 😃
Wenn Dir das zu umfangreich ist, hier ist noch ein einfacheres Beispiel:
Zugriff von UserControl auf Control der übergeordneten Seite
Gruß, MarsStein
Hallo,
das ist leicht zu erklären, wenn Du folgendes bedenkst:
Die xyzTransform-Methoden verschieben/drehen/skalieren das gesamte Koordinatensystem
Mit den Transformationen verschiebst Du in Deinem Ansatz den Koordinatenursprung in das erste Rechteck und drehst es so, dass die X-Achse nach rechts unten und die Y-Achse nach links unten zeigt.
Dann zeichnest Du die Rechtecke, benutzt dabei aber nochmal Deine Koordinaten aus Location
, Der Koordinatenursprung (also der Punkt (0;0) liegt aber schon im ersten Rechteck, also verschiebst Du durch erneute Benutzung von Location.X
alles nach rechts unten (entlang der neuen X-Achse) und durch Location.Y
nach links unten (entlang der neuen Y-Achse) und zwar vom neuen Ursprungspunkt im ersten Rechteck aus. Das führt dann genau zu dem Ergebnis, das Dein Bild darstellt.
HTH
Gruß, MarsStein
Hallo,
das dient zur Sicherheit. Wenn in dem Beispiel des Artikels der using
-Block betreten wird, ist die stream
-Variable am Ende des finally
-Blocks ja bereits null
und es passiert nix mehr.
Wird der using
-Block nicht betreten (z.B. durch eine Exception beim Erstellen des Stream, denkbar wäre aber auch, dass innerhalb des try
-Blocks noch if
-Abfragen stehen), dann wird im finally
noch aufgeräumt.
Gruß, MarsStein
Hallo,
dann geh' doch so vor wie ich oben in meinem Zweiten Absatz schrieb:
Verschiebe zunächst mit TranlateTransform(Location.X, Location.Y)
, drehe mit RotateTransform
und zeichne dann Deine Rechtecke nach (0;0)
, (0;feldbreite/3)
und (0;2*feldbreite/3)
.
Die xyzTransform
-Methoden verschieben/drehen/skalieren das gesamte Koordinatensystem, so dass Du damit hinkommen müsstest. Die linken oberen Ecke der beiden Rechtecke aus Deinem oberen Bild liegt dann genau aufeinander.
(wenn Du um die Mitte des grauen Kästchens drehen willst, musst Du mit TranslateTransform genu an diesen Punkt schieben und dann die Koordinaten, an die die Rechtecke gezeichnet werden, entsprechend anpassen -> das ist dann eine kleine Denksportaufgabe, die Du selbst lösen darfst).
Gruß, MarsStein
Hallo,
es gibt einige Dinge, die in WCF zwar keine Probleme bereiten, aber im WCFTestClient nicht funktionieren -> das wäre jetzt das einzige was ich mir vorstellen kann.
Erstelle doch mal ein eigenes kleines Client-Projekt um Deinen Service zu testen, die Struktur sollte WCF auf jeden Fall fressen.
Btw.: da ist diese Stelle //...
in Deine Attribute-Klasse, gibt es Da noch mehr (und vielleicht komplexere) DataMember?
Gruß, MarsStein
Hallo,
Zuerst hatte ich als Übergabeparameter 10 und 5, also jeweils die Hälfte vom Rechteck, damit ich die Mitte erhalte und das Rechteck sozusagen nicht um seinen (0,0)-Punkt (=Location des Rechtecks) zu drehen, sondern "um die Mitte".
Ein guter Ansatz. Die Mitte des Rechtecks findest Du allerdings mit Location.X + Width/2
und Location.Y + Height/2
Dann dreht das Rechteck auch um den Mittelpunkt.
Wenn jetzt aber die (gedrehte) Ecke am Punkt (Location.x;Location.Y)
liegen soll, empfiehlt es sich, genau diese Koordinaten als Parameter für TranslateTransform zu verwenden, damit Du zunächst den Nullpunkt an die Stelle schiebst, an der Du zeichnen willst. Dann zeichnest Du das Rechteck an die Koordinate (0;0), die ja nach der Translation dann dem gewünschten Zielpunkt entspricht.
Gruß, MarsStein
Hallo,
was macht Dich so sicher dass es an der Datenstruktur liegt?
Die sieht nämlich soweit korrekt aus...
Gruß, MarsStein
Hallo,
Generell dürfte dieser Session-Fehler immer dann auftreten, wenn der AppPool neu gestartet wird... und das ist normalerweise auch der einzige Fall in dem das passiert.
Mir ist noch aufgefallen, das es häufig auftritt, kurz nachdem ich ein Update eingespielt habe.
Das ist normal, weil genau dann immer der oben genannte Fall eintritt.Das passiert übrigens auch bei Änderungen an der web.config -> schreibt da irgendwas ab und zu mal rein?
Gruß, MarsStein
Hallo,
die Dropdownlist ist ein Steuerelement, dass nur sehr wenige Styles und gar keine Bilder unterstützt (<select>
mit <option>
in HTML).
Wenn Du das unbedingt haben willst, musst Du auf ein entsprechendes Control zurückgreifen, das dieselbe Funktionalität wie eine Dropdownlist bereitstellt. Es gibt Scripte, die sowas können und die DDL clientseitig ausblenden und was "schöneres" stattdessen einblenden.
Gruß, MarsStein
Hallo,
wird der WebService im IIS gehostet?
Wenn ja, gibt es noch mehr Anwendungen, die den selben Application Pool
im IIS benutzen? Dann könnte es daran liegen, dass durch Fehler oder Konfigurationsänderungen in diesen anderen Applikationen der gesamte Pool neu gestartet wird und Deine Sessions dabei verloren gehen. Das kannst Du dann vermeiden, indem Du einen eigenen Application Pool nur für Deinen WebService anlegst.
Gruss, MarsStein
Hallo,
wenn's darum geht, die einzelnen Werte auszulesen, kannst Du das auch einfacher haben:
Die Gruppierung wird ja dadurch realisiert, dass die RadioButtons einer Gruppe den selben Name
haben. Und es kann auch in jeder Gruppe nur jeweils ein RadioButton ausgewählt sein.
Dann bekommst Du die Werte fr die Gruppe auch direkt aus dem Request:
string myGroup1Value = Request["nameOfGroup1RadioButtons"];
string myGroup2Value = Request["nameOfGroup2RadioButtons"];
// usw.
Gruss, MarsStein
Hallo,
Prinzipiell ist es so, dass wenn das UserControl eine 32-bit API einbindet, alles, also auch das Projekt/Programm, welches das Control nutzen soll, auf 32bit, also x86 eingestellt werden muss.
Wenn das bei Dir schon der Fall ist, hast Du mal eine genaue Fehlermeldung?
Gruss, MarsStein
Hallo,
C#-Anwendung so unter Windows (meinem Betriebssystem) kompilieren, dass sie auf Linux läuft
ist prinzipiell gegeben, solange nur die Sachen benutzt, die auch in Mono existieren. Also keine Sachen aus dem Microsoft-Namespace z.B.
Für den Mono-eigenen Webserver für ASP.NET - den schon genannten XSP - gibt es auch ein Apache-Modul, so dass Du ASP.NET-Anwendungen auch direkt über den Apache hosten kannst.
Gruss, MarsStein
Hallo,
Damit POST-Daten angeommen werden können, muss dies ein [WebInvoke(Method="POST")]
-Attribut gesetzt sein, wobei Du das Method="POST" auch ggf. weglassen kannst, weil es der Default-Wert für WebInvoke ist.
Gruß, MarsStein
Hallo,
klingt irgendwie nach einem Lokalisierungsproblem (Punkt/Komma als Trennzeichen für die Dezimalstellen).
Gruß, MarsStein
Hallo,
das hier erscheint mir seltsam:
nAnzahl = serialPort1.BytesToRead;
byte [] buffer = new byte [nAnzahl-1];
this.serialPort1.Read(buffer, 0, nAnzahl -1);
Hat es einen bestimmten Grund, immer ein Byte weniger zu lesen als anfällt? 😉
Gruß, MarsStein
Hallo,
Ich bin ja sicher nicht der erste, der vor diesem Problem steht 😉 Korrekt.
Dafür haben wir auch die [FAQ] DB-Password/Kennwort/Connection-String sicher speichern
Auch wenn der Inhalt Dir vermutlich nicht unbedingt schmecken wird - mehr gibt's nicht.
Gruß, MarsStein
Hallo,
bist Du sicher dass Du system(...)
benutzen willst? Das ist ja eigentlich für die ausführung von systemeigenen (built-in) Befehlen gedacht -> also die, die in der Konsole bekannt sind, wie z.B. "dir". Diese brauchen keine Pfadangabe. Kann also sein dass sich diese Methode da gar nicht eignet. Wie wär's denn mit exec(...)
?
Gruß, MarsStein
Hallo,
möglich ist es mit WebForms auf jeden Fall: aber wie Abt schon sagt, kommst Du ohne Javascript nicht aus, und auch nicht ohne das Bild zuerst mal auf den Server hochzuladen.
Im Prinzip würde man so vorgehen, das Bild zunächst auf den Server hochzuladen (auch ohne dies wirst Du nicht auskommen) und dort zu speichern. Dann schickst du per Javascript noch Parameter an den Server, welche Aktion der Benutzer an welcher Stelle des Bildes vornehmen will. Auf dem Server wird das Bild dann geändert und einfach per Image-Tag in der Seite angezeigt, wobei die src
dann auf das (geänderte) Bild auf dem Server zeigen muss.
Gruß, MarsStein
Hallo,
Die Textbox wird nach dem Postwieder existieren Völlig korrekt. Wenn die Textbox im Markup steht oder per Code erzeugt wird (und eines von beiden wird wohl immer der Fall sein), dann ist sie serverseitig sowieso immer vorhanden, Du kannst wenn Du unbedingt willst prüfen ob für die Textbox ein Wert übergeben wurde (auch wenn's ein Leestring ist) indem Du
Request["nameDerTextbox"] != null
überprüfst. Die serversietig programmierten/erstelten Sachen können aber von Clientseite nicht beeinflusst werden -> wenn jemand die Textbox per Javascript deaktiviert oder entfernt bekommst Du halt einfach keinen Wert dafür übermittelt. Dem Server ist das ziemlich egal.
Gruß, MarsStein
Hallo,
dazu muss ja auch entweder die Klasse oder die Methode generisch sein.
Also entweder:
public static class GenericClass<T>
{
public static T getSelf(this T item)
{
return item;
}
}
oder
public static class GenericClass
{
public static T getSelf<T>(this T item)
{
return item;
}
}
Aber das fällt unter die Grundlagen die wir hier voraussetzen, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1
Gruß, MarsStein
Hallo,
es gibt ja Bildbearbeitungsprogramme die sowas können. Einige gehen dabei so vor, dass das Bild in 4 Teile zerschnitten wird und diese dann mit Verlauf nach Transparent hin über das Originalbild gelegt werden. Am besten erkennt man den Effekt, wenn man ein Bild nimmt das sich für eine Textur überhaupt nicht eignet.
Der Anhang zeigt ein solches Bild einmal im Original, und enmal mit der Funktion "Nahtlos machen" vom GIMP bearbeitet. Das Prinzip sollte dabei gut erkennbar sein.
Gruß, MarsStein
Hallo,
die Dll kennt zwar das Programm nicht, aber das Programm hoffentlich die Dll 😉
Dann kannst Du auch nur den Weg gehen, dass der Delegat in der Dll öffentlich verfügbar ist, und dann vom Programm aus besetzt wird.
Eine andere (bessere/leichtere) Möglichkeit wäre, in der Dll ein interface
zu definieren, das dann von der module-Klasse implemetiert wird. Dann kannst Du das Interface Deiner Dll übergeben.
Fürs allgemeine Verständis lies Dir mal [Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co. durch.
Beachte vorsorglich auch [Hinweis] Wie poste ich richtig? (bes. Punkt 1.1)
Gruß, MarsStein
Hallo,
wenn Du Windows.Forms benutzt, hast Du gute Chancen. Wie weit das mit .NET 4.0 ist weiss ich nicht, aber 3.5er Anwendungen laufen teilweise sogar unter Mono, ohne dass man überhaupt noch was machen muss - man kann dann direkt die .NET-Anwenung unter Mono ausführen, ohne neukompilieren. Wenn das nicht geht, musste den Code mal durch den Mono-Compiler jagen, und gucken was der sagt - die Änderrungen sollten sich in Grenzen halten (ausser Du benutzt Plattformspezfische Sachen, wie z.B. die Windows-Registry oder Sachen aus dem "Microsoft"-Namespace.
Gruß, MarsStein
Hallo,
schau mal in .EXE läuft auf Entwicklungsrechner, aber nicht auf anderem PC
Da wird einiges genannt was genau zu solchen Problemen führen kann. Bei Deinem Mailabfrage tippe ich auf fehlende Schreibrechte in Directory.GetCurrentDirectory()
.
Gruß, MarsStein
Hallo,
Visual Studio reicht auf jeden Fall.
Vielleicht irgendwie mit einem Panel und sich bewegenden PictureBoxen?
Das ist jedenfalls eine schlechte Wahl. Wenn's 3D sein soll, hast Du sowieso eine andere Umgebungen, wo Pictureboxen nicht unbedingt reingehören. Andernfalls zeichnest Du besser alles selbst.
Wenn's auch Windows.Forms sein darf, kann Dir [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) sicherlich beim Einstieg helfen.
Gruß, MarsStein
Hallo,
den kenn ich ähnlich - die Startbedingungen sind die gleichen (ausser das die Probanden nicht sterben - es wird ledigich nach 2 Tagen nachgesehen was passiert), zusätzlich befindet sich jedem Raum eine Gabel.
Dann ist es so:
Als nach 2 Tagen die Räume geöffet werden, hat der Ingenieur aus der Gabel einen Dosenöffner gebastelt, und den Inhalt verspeist.
Der Mathematiker sitzt völlig vertieft da und murmelt vor sich hin: "Nochmal von vorn:Nehemn wir also an, die Dose seischon offen...".
Im letzten Raum steht die Dose verschlossen am Boden, der Inhalt ist über sämtliche Wände verteilt, und vom Physiker ist nichts zu sehen. Schließlich öffnet man die Dose, drin sitzt der Physiker und sagt: "Mist, Vorzeichenfehler!"
Gruß, MarsStein
Hallo,
guck mal hier: WCF TransportCredentialOnly not sending username and password
So muss ich es auch machen, um von einer WP7-App auf einen WCF-Service zuzugreifen (ausser dass ich statt ASCII-Encoding UTF8 verwende... der Rest ist gleich). Sieht etwas umständlich aus, funktioniert aber bei mir einwandfrei.
Gruß, MarsStein
Hallo,
mit welcher Version von .NET arbeitest Du denn? Sieht so aus als würde das erst ab :NET 4.0 auf diese Weise unterstützt. Auch wenn es für 3.5 schon dokumentiert ist - da muss wohl auf jeden Fall noch eine zusätzliche Config-Section mit rein.
Siehe Converting domain names from russian to universal, die letzten beiden Beiträge.
Gruß, MarsStein
Hallo,
kann es sein dass die .jar die Logdatei während ihres gesamten Durchlaufs offenhält und erst am Ende alle Änderungen tatsächlich schreibt? Dann bekommst Du es auch erst am Ende mit...
Gruß, MarsStein
Hallo,
das von Abt gesagte kann ich nur bestätigen und bekräftigen, vor allem
Der eingebaute Webserver von dem Du sprichst, ist nicht so wirklich das Wahre.
Er produziert teilweise Phänomene, die nicht nachzuvollziehen sind und unter dem IIS auch oft nicht auftreten. und
Wenn Du vor hast eine einzige Connection für die komplette Anwendung zu nutzen will ich Dir gleich sagen: lass das.
Gruß, MarsSTein
Hallo,
das kannst Du auch mit dem GIMP (freie Software) machen.
Einfach die einzelnen Größen als einzelne Ebenen erstellen, und als .ico speichern. Beim Speichern kommt dann ein Dialog, bei der Du noch für jede Ebene (jedes Einzelbild des Icons) das Pixelformat festlegen kannst.
Gruß, MarsStein
Hallo,
grundsätzlich könnte es schon mit demselben Client/Port funktionieren. Ich kann mir aber auch vorstellen, dass es Probleme geben kann.
Insbesondere wird es vermutlich nicht gehen, ein UDP-Hole gleichzeitig für mehrere Clients offen zu halten. Der Trick ist ja, dass man ein UDP-Paket rausschickt, das zwar nicht angenommen wird, aber ein Dritter, der beide zu verbindende Clients kennt, dies dem Zielrechner mitteilt, so dass dieser dann antworten kann -> und nur von diesem Zielrechner wird dann eine Antwort akzeptiert. Wenn Du also ein Hole öffnest, wird das höchstens für den letzten angesprochenen Client offen sein.
Wiederholst Du für die zweite Verbindung wirklich den gesamten Hole-Punching Vorgang?
Gruß, MarsStein
Hallo,
Wenn ein Thread gestartet wurde, aber an der Stelle für serverPipe.WaitForConnection() am warten ist. Wie beende ich ihn korrekt?
Indem Du die asynchrone BeginWaitForConnection
-Methode benutzt, und ein AutoResetEvent
zur Steuerung.
Hier mal ein Beispiel:
class NamedPipeServerTest
{
public AutoResetEvent signal = new AutoResetEvent(false);
public void ServerThreadMethod()
{
using (NamedPipeServerStream npss = new NamedPipeServerStream("myPipe",PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous))
{
var asyncResult = npss.BeginWaitForConnection(ar => signal.Set(), null);
signal.WaitOne();
if (asyncResult.IsCompleted)
{
npss.EndWaitForConnection(asyncResult);
// hier der Code nach erfolgreicher Verbindung
}
}
}
}
class Program
{
static void Main(string[] args)
{
NamedPipeServerTest test = new NamedPipeServerTest();
Thread serverThread = new Thread(test.ServerThreadMethod);
Console.WriteLine("Starte Thread");
serverThread.Start();
Thread.Sleep(5000);
Console.WriteLine("Beende Wartevorgang");
test.signal.Set();
Console.WriteLine("fertig");
Console.ReadLine();
}
}
Gruß, MarsStein
Hallo,
kann das sein?? Ja. Möglicherweise gibt es auch einen Proxy, der nur HTTP-Verbindungen erlaubt.
Gruß, MarsStein