Da wir uns im C# Forum aufhalten:
using(StreamWriter strmw = File.Create(bla))
{
// Was auch immer
}
Directory.Delete(<pfad>,true);
Das using Statement kann man auch noch in eine Schleife packen.
[Edit]
@Evil
Diese Implementierung von Close ruft die Dispose-Methode auf, die den Wert true übergibt.
Davon abgesehen, das ein Close den Stream wirklich aufräumt, ist Dein Vorschlag für die Füße. Alles was nach verlassen des Namensraum zerstört wird ist eine Referenz auf
das Objekt. Dadurch wird aber Dispose nicht aufgerufen und der GC führt das dann aus wann immer er will. Beim Aufruf und ausführen von Delete kann das Objekt also durchaus noch bestehen.
)
es fehlt eine Klammer zu. So weit ich mich erinnere, erkennt Excel das zwar, wenn man sowas vergisst und macht die selbstständig. Bei Programmtechnisch eingetragenen Formeln eben nicht.
Hallo,
ich möchte folgendes erreichen:
eine List<MeinObjekt>, die in einem DataGrid dargestellt werden soll. Dabei soll halt eine Zeile jeweils ein Objekt des Typs "MeinObjekt" darstellen. Eine Teilmenge der Eigenschaften der Objekte sollen dabei die Spalten sein.
Ich könnte natürlich die Liste als DataSource vom DataGrid angeben. Aber wie wähle ich aus, welche Eigenschaften der Objekte ich als Spalten haben möchte?
Nach einiger Lektüre der MSDN, aus der ich ehrlich gesagt nicht viel schlauer geworden bin, bin ich zum Entschluss gekommen, daß ich vermutlich ein DataTable oder so bräuchte anstelle einer simplen List<>. Nur: Ich will ja das DataTable nicht jedesmal neu bauen müssen, wenn sich was in meiner Liste von Objekten ändert.
Vielen Dank.
http://www.tutorials.de/forum/net-grafik-und-sound/262933-videos-trailers-c-programm-abspielen.html
sind unte 2 Links die interessant sind les die mal durch.
Hi Knuddlbaer,
deine Annahme ist richtig.
Wegen Zeitdruck und der Tatsache das ich mich mit diesem Thema
nur temporär beschäftige und hauptsächlich an etwas anderem arbeite
habe ich wie du schon sagt keine Lust lange über den Quellcode nachzudenken.
Ich wollte diesen nicht in meinem Programm verwenden sondern einzig und
allein sehen. Ich brauchte diesen als Grundlagen für meine Arbeit.
Desshalb nochmal der Hinweis auf meinen Post,
ich habe freundlich darum gebeten das jemand einen Quellcode schereibt
den ich verwenden kann.
Links und Hinweise sind natürlich besser als nix, leider aber nicht
ganz zufrieden stellend den wie du schon gesagt hast, kann man
Quellcode Ausschnitte nur selten ohne nach zu denken benutzen.
Ich hoffe ich habe hiermit verdeutlicht was genau ich wollte.
Gruß Jeg!
Ist immer dasselbe: Mache die beiden Objekte einander bekannt.
Das geht in C# über Referenzen die via Properties, Methoden oder Konstruktorenaufrufe übergeben und gesetzt werden.
Dabei spielt es keine Rolle, was für eine Objekt das ist. Auch Dialoge und Forms sind einfach nur Objekte.
Simon
Hi,
hab just in diesem Moment den Fehler gefunden.
Wie du schon richtig bemerkt hast Asmodiel hab ich die Variable
die als Parameter übergeben wird genauso bennant wie das Array.
Nach dem ich es umbennant habe geht es natürlich.
Hier der Code wie es eigentlich hätte sein sollen:
void WriteErrorText(string Text) // ErrorText -> Text
{
if(etIndex < 1000)
{
ErrorText[etIndex] = Text;
etIndex++;
}
}
Vielen Dank Asmodiel für deine rasche Antwort.
Gruß!
ne ein sleep ist da schon ok
synchronisiert werden muss nichts, wenn ich muesste wuerd ich auf jeden fall kein sleep nehmen, da hast du absolut recht
es ist ein minispiel wo man gegen bis zu 3 CPU gegnern spielt
und wenn die ki so schnell ist - sieht man nur im verlauf was geschah weil alles durchrast - so sieht es aus als wenn jeder spieler n bissl nachdenken muss - macht den spielfluss angenehmer
ich hab den sleep als random - der gegner wartet nun 1-5 sekunden bis er eine aktion ausfuehrt - genauso schnell wie der menschliche gegner im durchschnitt braucht
Deepred92 schrieb:
ich wollte nur eine kleine dll ertsellen mit den ich paar werte ablesen kann mehr nicht
Na, dann mach das doch. Tipps wurden einige gegeben. Wenn Du nicht weiterkommst, stell vernünftige Fragen.
Servus,
das ist ein bissle knifflig mit der "cmd.exe". Ich hatte mich mal aus purer Langeweile etwas experimentell damit beschäftigt. Ich poste dir einfach mal meine ersten Ideen:
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
namespace SmallCommand
{
public sealed class CommandControl
{
#region Fields
public static event EventHandler ReceivedByte;
private const int BufferSize = 102400;
private static Process commandShell;
private static Thread readThread;
#endregion // Fields
#region Constructor
static CommandControl()
{
}
#endregion // Constructor
#region Methods
public static bool StartShell()
{
ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
//startInfo.Arguments = "/K C:";
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
commandShell = Process.Start(startInfo);
if ( commandShell == null )
return false;
readThread = new Thread( new ThreadStart(ReadUntilEnd) );
readThread.Start();
return true;
}
public static void StopShell()
{
commandShell.Close();
}
private static void ReadUntilEnd()
{
int count = 0;
int b = 0;
int nullCount = 0;
byte[] buffer = new byte[BufferSize];
byte[] blindBuffer = null;
while ( (b = commandShell.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > -1 )
{
blindBuffer = new byte[b];
Buffer.BlockCopy(buffer, count, blindBuffer, 0, b);
if ( ReceivedByte != null )
ReceivedByte(null, new DataEventArgs(blindBuffer));
foreach ( byte nullItem in blindBuffer )
{
if ( nullItem == 0x0 )
nullCount++;
}
count += (b + nullCount);
nullCount = 0;
}
}
public static void WriteCommand(string cmd)
{
commandShell.StandardInput.WriteLine(cmd);
}
#endregion // Methods
}
}
Vielleicht kannst du ja damit was anfangen....
- StartShell führt einen Thread aus, der bis ins Nirvana den OutputStream liest
- StopShell killt das ganze
- WriteCommand sendet einen Text an die Kommandozeile
Wirst es ja selbst sehen....
HF
Hellsgore