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
Um es kurz zu fassen:
Die einzige Möglichkeit ist dein Projekt auch auf 32 Bit zu kompilieren statt auf AnyCPU. Dann kann es sowohl auf 32 als auch 64 Bit Windows aufgeführt werden.
Folgendes klappt garantiert. Im schlimmsten Fall nimm diesen Code und adaptier ihn dann Schritt für Schritt an Deine Bedürfnisse.
David hat aber recht. Ich langweile mich nur gerade, daher poste ich hier den Code …
// Init:
var letters = Enumerable.Range(0, 26).Select(n => (char)('A' + N)).ToArray();
var rng = new Random();
PicBox.Image = new Bitmap(PicBox.Width, PicBox.Height);
// Zeichnen:
using (var g = Graphics.FromImage(PicBox.Image)) {
g.Clear(Color.White);
TextRenderer.DrawString(g, letters[rng.Next(26)].ToString(), PicBox.Font, new Point(10, 10), PicBox.ForeColor);>
/EDIT:
ich schrieb:
Ich langweile mich nur gerade, daher poste ich hier den Code …
Oh man … bin ich ein armselig.
Knuddlbaer schrieb:
Magst Du uns denn auch sagen was das Problem war damit andere, die auch nach so einem Problem suchen und Deinen Beitrag finden auch die dazu passenden Tips haben ?
Ja, natürlich! Das Problem war das verwendete generische delegate für den Event:
public event VoidHandler< object > OnNewConnection;
Zum eigentlichen Thema fehlt mir grad ein wenig Zeit um mir Gedanken zu machen, es sind aber ggf. auch noch Informationen nötig was da genau passiert. Die Daten könnten ja auch über Callback, Methoden oder sonst wie getauscht werden.
h dachte ich müsste nur kurz googeln, aber ich such mir grade nen Wolf…
Google: C# WindowsMessage send
Man kommt schon sehr tief an die Messages rann. Ggf. magst Du uns noch ein paar Details geben, dann hat bestimmt auch jemand konkrete Vorschläge.
So viel Aufregung, aber keine Antwort zur Sache -- schade. Sollte sich jemand beleidigt gefühlt haben, so war das nicht meine Absicht, und dafür entschuldige ich mich auch.
Aber dabei bleibe ich: Wenn ich den Post woanders neu stelle und das im alten Post so auch DEUTLICH kennzeichne, kann ich bei bestem Willen keinen Crosspost erkennen.
An den Moderator: Gibt es eine Möglichkeit, diesen unglückseligen Post hier zu löschen oder wenigstens als abgeschlossen zu markieren? Dann bitte ich darum. Schließlich bin ich ja auch nur an der Sachfrage interessiert.
Viele Grüße!
Hallo,
ich habe hier eine Windows Forms Anwendung. Diese wirft eine Exception, wenn sie von einem Netzwerkfolder ausgeführt wird. Eine Möglichkeit, diese Exception zu vermeiden wäre ja speziell für diese Anwendung einen Eintrag in dem .NET Konfigurationstool erzeugen.
Was mir allerdings lieber wäre: Ich würde direkt die exe gerne so kompilieren, dass die Exception gar nicht auftritt. Geht das in Visual Studio 2005 unter Project-->Properties-->Security? Habe da schon einige Einstellungen vorgenommen, aber leider ohne Erfolg.
Weiß jemand, was ich für Einstellungen in VS2005 vornehmen muss damit die Exception nicht mehr auftritt? Danke.
Hier ein Ausschnitt der Exception:
************** Exception Text **************
System.Security.SecurityException: Request for the permission of type
'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0,
Aber um zwei verschiedene Dinge zu tun brauchts zwei verschiedene Methoden.
Mich interessiert:
- Warum sind die beiden Methoden statisch?
- Warum gibts einen statischen Konstruktor?
Ev. kannst Du dein Problem ein wenig umfassender beschreiben und ein kleines Code Bsp. liefern.
Simon