Laden...

Forenbeiträge von PPK Ingesamt 157 Beiträge

29.09.2011 - 18:55 Uhr

Schau mal nach wieviel Bytes du wirklich aus dem StreamLiest...


int recv = ClientStream.Read...

Ich selbst hatte den Fehler auch mal eine Zeit lang, jetz aber nicht mehr...
Ich sende im ersten Byte immer den Type der Übertragung un im den Nächsten 4 Bytes immer eine uint variable der Länge (des MemoryStreams) per BitConverter in ein Bytearray convertiert.

28.09.2011 - 17:04 Uhr

Außerdem ist bei einem Chat der Datenverkehr auch nicht so groß.
Wenn man aber eine Verbindung haben möchte, die nicht über den Server läuft, sondern der Server nur als Vermittler tätig ist, dann geht TCP nicht.

PS: SendTo - heißt die Methode der Klasse Sockets um Daten an einen Client zu schicken (ohne Verbindung, bei UDPClient ist Send einfach überladen)

26.09.2011 - 18:13 Uhr

Wieso schließt du überhaubt dein UDPClient?
Und die Connect würde ich auch raus nehmen und per SendTo senden.
Wieso benutzt du eigentlich UDP und nicht TCP?

17.09.2011 - 15:14 Uhr

Also zur Aufnahme und zum abspielen bietet sich DirectX an...
Und per UDP schickt man es dann an den Server oder den Client...
UDP hat den Vorteil, dass du ein Loch in die Firewall bohren kannst, sodass
der Server als Vermittler arbeitet und der Traffic nicht mehr über den Server laufen muss.

13.09.2011 - 19:48 Uhr

Lese die Zeichen doch nur als Unicode aus
Encoding.Unicode.GetString
Edit: siehe Beitrag und Code von Scavanger

02.09.2011 - 15:13 Uhr

Dem TextRenderer kann man das Graphics object mit übergeben und als einstellung NoPadding angeben, sodass der Text richtig berechnet wird:


 TextRenderer.MeasureText(g, str, font, new Size(), // notwendeig, wenn ein zeilenumbruch am ender der Zeile erzeugt werden soll
            TextFormatFlags.NoPadding);

01.09.2011 - 20:30 Uhr

Ich vermute, dass es an der asynchronen Abhandlung der Datenstöme liegt.

  1. könntest du am ende der Batch z.B.: echo end anfügen,
    und in dein

private void create_db_OutputDataReceived(object sender, DataReceivedEventArgs e)
         {
             if (e.Data != null)
             {
                 if(e.Data == "end")
                       WriteToTextbox("Batch beendet.");
                 else WriteToTextbox(e.Data);
 
            }
         }
 
  1. Könntest du das Process objekt von einem Thread starten und dort mit dem StreamReader objekt (StandartOutput die Zeilen empfangen und per delegate an deine anwendung schicken).
    wenn der StreamReader am ende angekommen ist (und der Process beendet ist) dann feuerst du das Exited event.

 public class myProcess
    {
        public event EventHandler Exited;
        public event EventHandler<EventArgsMitStringParameter> OnDataReceived;
        Process p;
        public myProcess(string name)
        {
            /*Process erstellen...
            */
        }
        System.Threading.Thread th;
        public void Start()
        {
            //Noch  Prüfen ob th schon läuft...
            th = new System.Threading.Thread(Run);
            th.IsBackground = true;
            th.Start();
        }

        public void Run()
        {
            p.Start();
            while (!p.HasExited || !p.StandardOutput.EndOfStream)
            {
                string line = p.StandardOutput.ReadLine();
                if (OnDataReceived != null)
                    OnDataReceived(this, new EventArgsMitStringParameter(line));
            }
            if (Exited != null)
                Exited(this, new EventArgs());
        }
    }
}

31.08.2011 - 21:36 Uhr

Ja das geht.Entweder über die bytes (selber vergleichen) oder über IPAddress:


IPAddress.Parse(string);
long = IPAddress.Address;

31.08.2011 - 17:51 Uhr

Die comboBox arbeitet irgend wie mit einem zweiten fenster, einem (ChildWindow).
Diese nachricht wird ausgelößt nachdem eine Combobox geschlossen wird.
WM_PARENTNOTIFY Message

31.08.2011 - 17:30 Uhr

Dass MouseDown ereignis müsste hilft. Hinzu kommt noch das LeaveFocus ereignis wenn auf ein anderes Steuerelement gedrückt wird. Einziges Problem sid nicht selektierbare Steuerelement,

26.08.2011 - 23:46 Uhr

static void main()
{
   try
   {
          //-->
          ....
          <--//
    }
     catch(Exception ex)
     {
           MessageBox.Show("Es ist ein fehler aufgetrete blablablub"+ex.Message,
                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);                                       
     }
}

26.08.2011 - 18:27 Uhr

Mal eine frage zu der Funktion von dN!3L
Wäre es nicht deutlich besser


int Number = 4;
for(int a = 0; a < Number; a++)
   for(int b = a +1 ; b < Number; b++)
       Console.WriteLine("{0};{1}",a,b);

26.08.2011 - 15:12 Uhr

Wie wäre es wenn du eine Funktion schreibst:


public class Form1() : Form
{
  ...
    public void ShowError(string message)
    {
          this.Textbox.Text = message;
    }
}


Form1 form = new Form1()
try
{
}
catch(Exception er)
{
    form.ShowError(er.Message);
}

25.08.2011 - 13:52 Uhr

In welchem Wertebereich liegen den die Zahlen?

24.08.2011 - 17:38 Uhr

Wiso schickst du eigentlich einen string?
Du willst doch Zahlen senden oder? Dann müsstest du doch nur ein Array aus int oder byte oder was auch immer senden.

23.08.2011 - 16:07 Uhr

Probiere mal

string dr =Path.Combine(ergebnis,"profiles.ini");

Ansonsten müsste es

dr = ergebnis + "profiles.ini";

sein

21.08.2011 - 18:40 Uhr

Probier mal
delegate void Del();

und dann

label1.Dispatcher.BeginInvoke((Del)()=>label1.Content = stopWatch.Elapsed));

21.08.2011 - 18:12 Uhr

Über die DrawToBitmap-Methode der Controlklasse.


Bitmap bmp = new Bitmap(this.pictureBox1.Width,this.pictureBox1.Height);
this.pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));

25.03.2011 - 18:31 Uhr

ich würde vorschlagen, dass du am Anfang die Länge der zu sendenden Daten schickst.
Client --> Sende 4 Bytes (int) : Länge
Client --> Sende Name + char(29) + Passwort
Server --> Empfängt 4 Bytes (Länge)
Server --> empfängt 'Länge' Bytes

Jetzt muss der Server nur noch Name und Passwort trennen und fertig.

14.02.2011 - 19:27 Uhr

Könntest du dein Problem etwas genauer schildern,
bei mir funktionieren nämlich Arrays-->[][].

19.12.2010 - 16:02 Uhr

Also ich hab versucht deine Klasse nachzubauen, allerdings muss ich zum lesen einmal vor dem 1. lesen ein leseversuch starten:


public Stream BaseStream
        {
            get
            {
                return _baseStream;
            }
            set
            {
                _baseStream = value;

                deflateCompress = new DeflateStream(value, CompressionMode.Compress);
                deflateDecompress = new DeflateStream(value, CompressionMode.Decompress);
//hier:
deflateDecompress.Read(new byte[1], 0, 1);

            }
        }

Dann geht es, ich weiß aber nicht wiso ?.?

18.12.2010 - 19:36 Uhr

Hast du bei deinem Header Content-Length gesetzt?

18.12.2010 - 19:17 Uhr

kannst du bitte den Teil mit dem schreiben / lesen posten?

09.12.2010 - 19:11 Uhr

Sorry die hab ich erst nicht gelesen, da ich schon 18:30 auf antwort erstellen geklickt hab...
Und ja dann ist klar, warum es nicht funktioniert

09.12.2010 - 19:06 Uhr

2 Fragen warum:


 EventHandler createMenu = CreateMenu;

und zweitens: ist bei


 public ModuleSearchTabContent()
        {
            OnCreateMenu(EventArgs.Empty);
        }

dein EventHandler auch schon null? Und wo löst du es aus?

Die EventArgs sind hier egal, da du sie ja nicht auswertest.

07.12.2010 - 19:16 Uhr

Er wollte nur eine Idee haben. Ansonten kann er ja den letzten String speichern


 try
            {
                if (textbox.Text == "")
                    Number = 0;
                else
                { Number = Convert.ToDouble(textbox.Text);
                   last_String = textbox.Text;   
                 }
            }
            catch
            {

                int old_Cursor = textbox.CaretIndex;
                textbox.Text = last_String;
                textbox.CaretIndex = old_Cursor-1;
            }
        

BTW: Das Komma sollte nur dann durch einen Punkt ersetzt werden, wenn es nur ein Komma und keinen Punkt gibt in dem eingegeben Text gibt. Sonst bekommt man Probleme, wenn der Benutzer die Zahl mit Tausendertrennern eingegeben hat.

Wie wäre es wenn er ein char als Trennzeichen festlegt, ich glaube nicht, dass er Probleme hat, diese Idee zu verbessern. So kann er ein Char als Trennzeichen definieren, ein boll ob er eine Zifferngruppirung möchte ...und....und...und

Hat jemand einen Ansatzpunkt für mich?

07.12.2010 - 17:39 Uhr

Replace funktioniert vielleicht nicht, aber es wird nicht verworfen was er eingegeben hat:


catch
            {

                int old_Cursor = textbox.CaretIndex;
//nicht verforefen:-->
                textbox.Text = Number.ToString();
                textbox.CaretIndex = old_Cursor-1;
            }

Damit wird der Text zur letzten richtigen Zahl

07.12.2010 - 15:38 Uhr

Hi
das hab ich auch mal gemacht und hatte eine Ziemlich einfache Lösung dafür:
Überschreibe das TextChanged-Event:


 private void textbox_TextChanged(object sender, TextChangedEventArgs e)
        {
            try
            {
                if (textbox.Text == "")
                    Number = 0;
                else Number = Convert.ToDouble(textbox.Text);
            }
            catch 
            {
                
                int old_Cursor = textbox.CaretIndex;
                textbox.Text = Number.ToString();
                textbox.CaretIndex = old_Cursor-1;
            }
        }

PS: wenn du ein Punkt als Trennzeichen haben willst, musst du nur:


 else Number = Convert.ToDouble(textbox.Text.Replace(".",",");

 bzw:
 textbox.Text = Number.ToString().Replace(",",".");

//Edit:
Das Problem ist bei mir nur, dass er für z.B.: 5,0 --> 5 schreibt, weshalb es sehr schwer ist hier eine Komazahl einzugeben, also musste am besten bei jeder Ganzen Zahl ,0 dranhngen

04.12.2010 - 13:49 Uhr

Hallo ich habe ein Problem. Ich lese mithilfe der Capture Klasse über DirectX.DirectSound einen AudioStream vom Mirco ein, aber das Problem ist, dass man ein Rauschen im Hintergrund hört. Ich möchte jetzt dieses Rauschen unterdrücken, doch hab ich keine Ahnung wie. Ich weiß, dass es CaptureNoiseSuppressEffect und CaptureEffectsNoiseSuppress gibt, allerdings weiß ich nicht wie man diese verwendet.

02.12.2010 - 20:05 Uhr

Ich hab keine Ahnung was Available macht, aber bei mir ist es auch immer 0,
obwohl ich lesen kann, also musst du Available weglassen und eine ander Lösung finden

02.12.2010 - 19:44 Uhr

Was für ein Effekt meinst du, das der Button heller wird?
Dann versuche mal Templates

02.12.2010 - 19:29 Uhr

Also bei mir wird die OnPaint Methode aufgerufen

27.11.2010 - 19:52 Uhr

Eine Frage warum:


srClients[i] = new StreamReader(clients.GetStream());[/i]
swClients[i] = new StreamWriter(clients.GetStream());[/i]

Eigentlich müsstest du soch bloss immer ReadLine() aufrufen, weil die Position um eine Zeile verschoben wird.

20.11.2010 - 14:18 Uhr

wie wäre es damit, vielleicht funktioniert es


   Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            MemoryStream s = new MemoryStream();
            byte[] bufferRec = new byte[8012];
            int i = 0;
            while ((i = client.Receive(bufferRec, SocketFlags.None)) > 0)
            {
                s.Write(bufferRec, 0, i);
            }

18.11.2010 - 22:06 Uhr

Du könntest auch Cookies benutzten.

18.11.2010 - 19:58 Uhr

Es geht auch ohne den Explorer zu killen:


  [DllImport("User32.dll")]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        Timer t = new Timer();
       Form1()
       {
            InitializeComponent();
            t.Tick += new EventHandler(tick);
            t.Interval = 100;
            t.Start();
        }

        private void tick(object sender, EventArgs e)
        {
            SetForegroundWindow(this.Handle);
        }
      bool should_close = false;
     private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(!should_close)
                 e.Cancel = true;
        }

Wichtig: Formboarderstyle.None
Beim starten Maximiert

Ansonsten wenn du umbedingt den Explorer killen willst, dann mach es so:

  Process.Start(Environment.GetEnvironmentVariable("windir")+"\\explorer.exe");

Er öffnet wahrscheinlich eine ander explorer.exe, kann dir aber nicht sagen welche.
Egal so funktioniert es jedenfalls

14.11.2010 - 19:03 Uhr

Ich weiß es nicht genau aber es gibt auf jeden Fall noch den Schlüssel Directory.

Mit "*" hatte ich es bereits probiert. Damit klappt es nicht.

* Gillt glaube ich nur für Dateien

14.11.2010 - 18:12 Uhr

Also ich würde 2 Klassen erstelleb, die von Class1 abgeleitet sind


   B_C_Class : Class1
   {
    public Object B;
    public Object C;
   }
   A_Class : Class1
   {
    public Object A;
   }

Das ist doch, das was du woltest oder?

08.11.2010 - 19:42 Uhr

@gfoidl
Danke für den Tipp leider Funktioniert das bei Appand Funktion nicht und den ganzen Core - Methoden auch nicht

08.11.2010 - 19:16 Uhr

Hi ich habe ein Problem.
Ich möchte eine Klasse von Transform 3D ableiten, allerdings muss ich dazu einige vererbte Member implementieren, hab allerdings keine Ahnung wie und finde auch bei Microsoft keine erläuterungen darüber.

z.B. "Classe1.Class1" implementiert den geerbten abstrakten Member "System.Windows.Media.Media3D.Transform3D.Append(ref System.Windows.Media.Media3D.Matrix3D)" nicht.

07.11.2010 - 16:50 Uhr

Außerdem sind Threads sowiso nicht die beste Wahl unter Visual Studio 2010 wurde die TPL eingeführt, die bei komplexen Rechnungen um etliches schneller geht.
Aber C# würde ich nicht empfehlen, da C# unter .Net laüft und daher eh langsamer ist. Ich empfhele Assambler. Oder C++ , da C++ einmal C# sehr ähnlich ist und zum anderen schon fertigen Code erzeugt

06.11.2010 - 15:30 Uhr

Sorry aber ich versteh dich nicht, normalerweise sollte es einen Batchlauf überhaupt nicht stören, ob du mit der Batchdatei irgendwas anstellts. Und bei mir funktioniert das auch.

06.11.2010 - 15:12 Uhr

Genau so mein ich dass

03.11.2010 - 20:08 Uhr

Wenn du als größe zum Beispiel eine int Variable sendest, wäre dann die Größe nicht immer gleich groß nämlich 4 Bytes bzw. Short, die ist immer 2 Bytes groß ???

27.10.2010 - 19:17 Uhr

Wie dein Dialog ist sichtbar aber dein Tool nicht???
Das Event heißt glaub ich Loaded undja du kannst die DatenLade-geschichte in
einem Extra Thread laufen lassen.
Und wichtig ist, dass du am Ende aufpasst, da du Steuerelemente nur aus dem Thread in dem du es auch erstellt hast aufrufen kannst!!!

Also solltest du das Problem haben, dann mach eine Funktion, die
MainWindow.Dispatcher.Invoke(Delegate) aufruft, dann wird die Funktion bzw. der
Delegate in dem Thread des MainWindow aufgerufen

27.10.2010 - 08:19 Uhr

Ich glaube es liegt an der verbindung
das Socket-Object muss ja warten bis der Server die annahme bestätigt. Erst dann kann er senden.
Wo genau dauert das Programm den so lange?

26.10.2010 - 16:23 Uhr

Ok, wenn ihr hierauf keine Antwort wisst, könnt ihr mir dann wenigstens sagen, wie ich eine Xaml datei verwenden kann, bei Fenstern, Seiten... geht das, aber ich bekomm das nicht bei meiner eigenen Klasse hin

23.10.2010 - 18:35 Uhr

Also ich muss sagen ja noch besser wäre es aber wenn du auch die Stelle des Zeichen im Text mit einbeziehst, dann wird es erheblich schwerer zum Entschlüsseln. oder wenn de ein Paar falsche Zeichen einfügst

23.10.2010 - 18:10 Uhr

Weil doch alle in ner Liste gespeichert sind, also kannste ja alle Durchsuchen, oder aber, da du ja sowieso nur eins als Checked registriert hast kannste es ungefähr so gestalten


 MenuItem CheckedItem;

 OnClick(object sender,EventArgs e)
 {
         CheckedItem.isChecked = false;
         CheckedItem=(MenuItem) sender;
         CheckedItem.isChecked  = true;
}

23.10.2010 - 17:48 Uhr

Ist die Anzahl der MenuItems eigentlich fest vorgeschrieben?