Der Dialog erscheint nur bei C++ oder C++/CLI Projekten. Bei einem C# Projekt erscheint dieser als Reiter. Mir ist nicht bekannt, dass man dies ändern könnte.
Grüssli
Jetzt funkionierts. Ohne den zusätzlichen Thread.
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Diagnostics;
using System.IO;
public class serv
{
static StreamReader mystreamreader;
public static void Main()
{
try
{
/* Initializes the Listener */
TcpListener myList = new TcpListener(System.Net.IPAddress.Any, 8001);
/* Start Listeneting at the specified port */
myList.Start();
Console.WriteLine("The server is running at port 8001...");
Console.WriteLine("The local End point is :" +
myList.LocalEndpoint);
while (true)
{
Console.WriteLine("Waiting for a connection.....");
Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
Process p = aufgabe();
mystreamreader = p.StandardOutput;
ASCIIEncoding asen = new ASCIIEncoding();
try
{
while (true)
{
byte[] arr = new byte[1];
arr[0] = (byte)mystreamreader.BaseStream.ReadByte();
s.Send(arr);
}
}
catch (Exception ex)
{
Console.WriteLine("Fehler. Vermutlich hat Client die Verbindung getrennt.");
}
}
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
public static Process aufgabe()
{
Process process = new Process();
process.StartInfo.FileName = "c:/windows/system32/ping.exe";
process.StartInfo.Arguments = "google.de -t";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
Console.WriteLine("Ping-Process gestartet.");
return process;
}
}
Gruß,
Markus
Das war auf False, hat mir aber nur bedingt weiter geholfen. Jetzt sehe ich alle UserControls welche ich durch das einbinden eines FremdAssemblys hinzubekomme. Aber das UserControl welches aus dem eigenen Projekt (und eigenes Assembly) stammt sehe ich immer noch nicht.
Auf einmal isses da. Ich hab noch ein eigenes UserControl zum Projekt hinzu gefügt.
Ich wollt mit meiner Aussage nicht ausdrücken dass static class schlechter Stil ist zumindest nicht so direkt wie es aufgefasst wurde, sondern dass hier in den meißten Fällen ein einfacher Singleton vorzuziehen wäre.
Auch ich nutze ab und an reine static Klassen. Bietet sich halt in einigen Fällen auch mal an.
Verteufeln kann man alles, irgendwann kommt man auf einen Anwendungsfall, wo das was man verteufelt hat die beste Lösung wäre.
Im Grunde genommen ist das aber kein Thema wo man nun ewig drüber debattieren muss, also steig ich hier aus der Diskussion aus.
superkato schrieb:
Wenn ich z.B.
myInt=4; habe und dann myInt.ToString() schreibe wäre das so die korrekte Vorgehensweise für jede Variable ? es funktioniert ja so.
Gruß
SuperKato
Ja das wäre eine richtige Vorgehensweise.
Ansonsten kannst du auch die XmlConvert Klasse benutzen, wie es bei stark typisierten Daten empfohlen wird.
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
Weiterhin gibt es Beispiele zum erstellen von XML Dateien mit dem "XmlTextWriter".
hä? klar geht das dann "noch" (es geht nur so)
mutex m("lalala");
if (kann_mutex_locken(m))
lauf_normal();
else
schicke_parameter_an_andere_instanz_und_beende_dich();
natürlich kannst du auch das vorhanden-sein/nicht-vorhanden-sein des pipe-servers als indikation für "läuft schon" verwenden.
Hi,
nachdem du weißt das ein neues Gerät angeschlossen worden ist,
könntest du einfach das "neue" Verzeichnis überwachen.
Sobald das Gerät wieder getrennt wurde, ist auch das Verzeichnis
ungültig.
Wäre ein kleiner Workaround bist du eine andere "saubere" Lösung findest.
Gruß
Hi Community,
beim Versuch ein Form aus einem zweiten Thread zu erstellen, scheitert mein Code beim Invoke und wirft eine Exception.
Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
vom Typ InvalidOperationException.
Die Situation sieht wie folgt aus:
Ich lasse meine Anwendung auf Nachrichten einer weiteren Instanz meiner Anwendung warten. Die Nachrichten treffen über Pipes ein. Ist eine neue Nachricht eingetroffen, wird diese durch einen Parser gejagt. Dieser soll feststellen ob die Nachricht für meine Anwendung relevante Befehle enthält. Ist dies der Fall, so wird meine Anwendung angewiesen bestimmte von mir definierte Aktionen auszulösen. In meinem aktuellem Fall, soll ein neues WindowsForm erstellt werden um diverse Informationen anzuzeigen.
Um das Szenario ein wenig zu verdeutlichen, poste ich mal die relevanten Ausschnitte aus meiner Anwendung.
Mein delegate für die Funktion:
private delegate void InvokeFormPersonDetail(Stelle stelle, Person person);
Mein abonniertes Event:
void commanderEvents_OpenBewerber(Stelle stelle, Person person)
{
object[] parameters = { stelle, person };
Control ctrl = new Control();
ctrl.Invoke(new InvokeFormPersonDetail(CreateFormPersonDetail), parameters);
}
Die Exception tritt beim Invoke auf. Der Versuch im Konstruktor des aufzurufenden Forms ein CreateControl() zu platzieren um ein Win32 Handle zu erzwingen half leider nicht weiter.
Evtl. hat einer von euch eine Idee oder Lösung, die mich hier weiter bringen könnte.
Gruß!
Edit: Ich habe den Fehler gefunden. Mein Event muss natürlich so aussehen:
void commanderEvents_OpenBewerber(Stelle stelle, Person person)
{
object[] parameters = { stelle, person };
this.Invoke(new InvokeFormPersonDetail(CreateFormPersonDetail), parameters);
}
Der Invoke Aufruf muss natürlich auf meine Form (this) gelegt werden und nicht auf ein neues Control.
Jetzt funktioniert es wie es soll.
/Wenn der Admin möchte, kann er meinen Beitrag wieder entfernen./
http://msdn.microsoft.com/en-us/library/system.drawing.pen.dashpattern.aspx
MSDN schrieb:
An array of real numbers that specifies the lengths of alternating dashes and spaces in dashed lines.
Setz im Pen einfach
myPen.DashPattern = new float[]{2.0F, 20.0F};
dann müsste er 2 pixel linie, 20 pixel abstand usw im wechsel machen.
Hallo,
vielen Dank erstmal für Eure Antworten und sorry, dass ich mich erst jetzt melde (hatte doch noch kurzfristig Urlaub...).
Die Lösung sollte auf jeden Fall effizient sein, da ich das ganze mehrfach alle 5ms machen muss.
In meiner jetzigen Umsetzung habe ich testweise das große Array als Byte-Pointer-Array umgesetzt und die einzelnen Bytes der kleinen Byte-Arrays folgendermaßen verknüpft:
...
unsafe private void TestVerknuepfung()
{
this.bNichtInit = true;
for (int i = 0; i < this.test1.ByArray.Length; i++) {
fixed (byte* testByte = &this.test1.ByArray[i]) {
TestFrame.byDaten[i] = testByte;
}
}
for (int i = 8; i < 16; i++) {
fixed (byte* testByte = &this.test2.ByArray[i-8]) {
TestFrame.byDaten[i] = testByte;
}
}
}
...
//Objekt eines kleinen Byte-Arrays
namespace SchnellTest
{
unsafe public class Test
{
public Test(bool b)
{
if (b) {
for (int i = 0; i < this.ByArray.Length; i++) {
this.ByArray[i] = (byte)i;
}
}
else {
for (int i = 0; i < this.ByArray.Length; i++) {
this.ByArray[i] = (byte)(8 - i);
}
}
}
public Byte[] ByArray = new Byte[8];
}
}
//Objekt des großen Byte-Arrays:
namespace SchnellTest
{
unsafe public class Frame
{
public Frame() {}
public Byte*[] byDaten= new Byte*[16];
}
}
Der Test lieferte das gewünschte Ergebnis, ich bin mir aber noch unsicher, ob mir der GarbageCollector nicht Probleme bereitet und bspw. die "Adressen der kleinen Byte-Arrays" verwurstelt. Auch wegen der Performance bin ich mir nicht sicher. Habt Ihr dazu Informationen?
Den Vorschlag bezüglich Concat habe ich noch nicht weiter verfolgt, da ich momentan noch nicht ein Framework >= 3.5 benutze, werde ich dann aber bei Gelegenheit noch nachholen.