Laden...

Forenbeiträge von Atomroflman Ingesamt 266 Beiträge

04.03.2013 - 20:54 Uhr

Auf die Gefahr hin jetzt als Idiot da zu stehen. Frage ich doch noch mal nach.

Ich habe auf meinen Server den Remote Debugger gestartet. Der Debugger läuft auf 32Bit weil Target Platform 32Bit.
Dann habe ich die Einstellungen im Remote Debugger auf "Keine Authentifizierung" gestellt und in meinen Visual Studio folgendes konfiguriert:

Start external Program: D:\Local\Path\To\Application.exe
Working Directory: \Server\Path\To\ (Path ist ein Netzwerk share)
Use Remote Machine: Server

Wenn ich jetzt F5 drücke bekomme ich folgende Meldung:> Fehlermeldung:


Microsoft Visual Studio

Error while trying to run project: Unable to start debugging.

Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort.

Warum?
Alle Benutzer debuggen ermöglichen (an oder aus versucht)
Authentifizierung ist aus

Und wenn ich Attach to Process mache funktioniert es. Nur dann bin ich lange an dem Teil vorbei den ich debuggen möchte. X(

Woran kann es noch liegen dass sich das Programm nicht aus dem VS starten lässt?

Danke schon mal im vorraus.

25.10.2011 - 17:42 Uhr

Hallo zusammen,

ich versuche grade mir eine Funktion zu basteln, die mir eine Liste an Servern zurück gibt, die im lokalen Netzwerk zur Verfügung stehen, auf denen ein bestimmter Dienst läuft.

Die Funktionsweise soll so ähnlich sein wie die Suche bei einem LAN-Spiel.

Gibt es zu sowas Tutorials, wie so was prinzipiell funktioniert?

Danke schon mal.

07.07.2011 - 10:41 Uhr

Hallo Zusammen,

ich bin auf der Suche nach einem Weg der mir die Dateien anzeigt die ein bestimmter Prozessgrade liest und schreibt.
Oder besser noch bescheid sagt wenn sich die Liste ändert.

Gibt es so was in fertig?

Mein kleines Testprojekt sieht wie folgt aus:


        private void Form1_Load(object sender, EventArgs e)
        {
            Process[] runnig = Process.GetProcesses();
            foreach (Process p in runnig)
            {
                AdvProc a = new AdvProc(p);
                comboBox1.Items.Add(a);
            }

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (((AdvProc)comboBox1.SelectedItem).Proc.HasExited)
                    comboBox1.Items.Remove(comboBox1.SelectedItem);
                else
                {
                    AdvProc p = ((AdvProc)comboBox1.SelectedItem);
                    this.Text = p.Proc.HandleCount.ToString();
                    // hier sollen die Dateien gelesen werden...
                    foreach (ProcessModule m in p.Proc.Modules)
                    {
                        listView1.Items.Add(m.FileName);
                    }
                }
            }
            catch
            {
                comboBox1.Items.Remove(comboBox1.SelectedItem);
            }
        }
        // damit die Combobox was richtiges anzeigt...
        public class AdvProc
        {
            public Process Proc;
            public AdvProc(Process p)
            {
                Proc = p;
            }

            public override string ToString()
            {
                return Proc.ProcessName;
            }
        }

Wobei ich jetzt nach den Dateipfaden oder Dateihandles suche die der ausgewählte Prozess hat.

Process.Modules gibt leider nur die ganzen geladenen DLLs und das EXE File zurück.
Ich suche aber eher nach dem txt File welces ich im editor geladen habe.

Danke schon mal im Voraus.

27.10.2010 - 08:08 Uhr

Also dass mit der 2ten Tabelle klingt doch schon mal nach einem vernünftigen Plan... Also quasi die Texte als Variablen übergeben ist wohl am einfachsten...
Denn kannst du die Felder einfach in den Berichtsfuß ziehen... 👍

Formeln kannst du nur auf Berichtsvariablen anwenden, nicht auf TextObjekte...

Oder gibt es einen Bestimmten Grund warum du das Template des Berichtes ändern willst?
Die TextObjekte sind die Festen Texte die du im Crystal Editor einfügst...
Wenn du das Problem mit den Zeilenumbrüchen nicht gelöst bekommst, kannst du vllt. noch die TextObjekte klonen und die Texte untereinander in verschiedene TextObjekte schreiben...

15.10.2010 - 10:44 Uhr

Das Problem dabei ist dass es auf den Festplatten der Kundensysteme oft Zugriffs- und BBerechtigungsprobleme geben soll.

Deswegen soll nach möglichkeit nichts auf die lokale Festplatte geschrieben werden. Also auch keine TempFiles.

Ich hatte zeitweilig mit dem Gedanken gespielt einfach ein RAM-Drive für die Laufzeit zu mappen wo das Temp Zeug hinfällt. Nur doof dass man dazu auch mehr Rechte braucht als ich dort haben werde. 😦

15.10.2010 - 10:18 Uhr

Hallo zusammen,

ich versuche grade eine Mimik zu bauen, die Berichte aus der DB laden kann.
Ich bin auch schon so weit dass ich die Berichte hoch und runterladen kann.

Ich habe allerdings jetzt das Problem, dass die Berichte nicht auf die Festplatte geschrieben werden sollen. Also muss ich sie irgendwie aus einem MemoryStream in ein ReportDocument umwandeln.

Hat jemand so was schon mal gemacht oder ne Idee wie das funktionieren könnte?


// Schnipsel: So hab ich mir das vorgestellt.
// Nur leider nimmt Load keine Binärdaten an sondern nur Pfade
byte[] ReportData = GetReportFromDB(ID);

using (ReportDocument Doc = new ReportDocument())
{
   Doc.Load(new MemoryStream(ReportData));
}
Doc.PrintToPrinter(0, true, 1, 1);

Grüße.

28.05.2010 - 23:12 Uhr

Kann mir jemand sagen wie ich Variablen auswerte, bei denen ich vorher noch nicht weiss wie sie heissen...

Also:


long MyVar = 1337;
object Result = GibMirWert("MyVar");
return Result; // Enthält 1337

31.03.2010 - 20:10 Uhr

verwendetes Datenbanksystem: mysql

Hi Leute,

ich suche nach einer möglichkeit die Spaltendefinition eines SELECT-Statements zu erfragen.


Describe (SELECT * FROM Sys_Users)

Ergebnis:


DESCRIBE (SELECT * FROM Sys_Users);
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | Sys_Users | ALL  | NULL          | NULL | NULL    | NULL |    1 |       | 
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+

ich suche allerdings nach einem ergebnis welches die ausgegebenen Spalten des SELECTs wieder gibt
also eher so:


+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| ID       | int(10) unsigned | NO   | PRI | NULL    | auto_increment | 
| Name     | varchar(45)      | NO   | UNI | NULL    |                | 
| Icon     | int(10) unsigned | YES  | MUL | NULL    |                | 
| PersonID | int(10) unsigned | YES  | MUL | NULL    |                | 
+----------+------------------+------+-----+---------+----------------+

Ist euch eine Möglichkeit bekannt wie man das umsetzen kann??

EDIT: Mir würden auch die ersten beiden Spalten der Ausgabe reichen.

Danke!

30.03.2010 - 12:53 Uhr

Ich versuche aus einer DataTable einen Report zu erstellen, der nur die Eigabevariablen kennt. Die Formatierung ist dabei unwichtig.

Allerdings habe ich noch keinen Ansatz wie ich das machen muss.

Hat jemand schon mal was ähnliches gemacht?

26.03.2010 - 01:46 Uhr

Ich will den Thread auch noch ein mal ausgraben weil ich auch gerne auf die MessageBoxen zurück greifen würde...

Allerdings nur wenn ich daran auch etwas anpassen könnte...
Wird es die Sourcen zu dem nicht VB Projekt geben?

Wo bekommt man denn die Taskdialoge von Vista her?

21.11.2009 - 17:29 Uhr

Das Programm ist so angelegt dass es beim selektieren alle Zeilen ignoriert die das Lock auf 3 gesetzt haben. Das tut es in jeder Tabelle. Ich habe nur versucht das setzen aus dem Programm in die DB zu verlagern.

Die Locked Zeilen können über einen Schalter wieder angezeigt werden. Wenn der User nun merkt, dass er eine falsche Zeile gelöscht hat kann er sie wieder holen, ausser sie wurde bereits überschrieben.

21.11.2009 - 17:02 Uhr

Ja ich habe das benutzt und nen PK hinzugefügt.

Die Spalten sind immer vorhanden, da auch diese automatisch angelegt werden.

Ich habe das Problem auch schon gelöst. Es hing an einem Flag was gesetzt werden muss, damit der Trigger den Fehler nicht schmeisst der gecatcht werden soll...

SET XACT_ABORT OFF;

Den Rest des Codes erspar ich eich mal.

Ziel des ganzen war dass ich an jeder Zeile sehen kann wer / wann zuletzt an daran geändert hat.

21.11.2009 - 10:26 Uhr

verwendetes Datenbanksystem: MSSQL 2008 Express

Hallo ihrs,

ich habe mir einen Datenbank-Trigger angelgt, der automatisch Trigger in einer neuen Tabelle anlegen soll falls diese nicht vorhanden sind.
Allerdings kann ich nun Tabellen nicht mehr ändern weil ich auf einen Fehler laufe, da der Name des Triggers schon vergeben ist.


CREATE TRIGGER [Create_DefaultTriggers]
   ON  DATABASE 
   AFTER CREATE_TABLE
AS 
BEGIN
	DECLARE @data XML;
	SET @data = EVENTDATA();

	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @TableName varchar(100), @Statement varchar(1000);
	SET @TableName = EVENTDATA().value
        ('(/EVENT_INSTANCE/ObjectName)[1]','varchar(100)');
    -- Insert statements for trigger here
	IF NOT (@TableName LIKE 'System%')
	begin
		BEGIN TRY
			SET @Statement = 
				' CREATE TRIGGER [dbo].[Delete' + @TableName + ']' +
				' ON  [dbo].[' + @TableName + ']' + 
				' INSTEAD OF DELETE AS' + 
				' BEGIN' +
				' SET NOCOUNT ON;' +
				' DELETE FROM [dbo].[' + @TableName + '] WHERE ID in (SELECT ID FROM DELETED WHERE Lock = 3);' +
				' UPDATE [dbo].[' + @TableName + '] SET Lock = 3 WHERE ID in (SELECT ID FROM DELETED);'+
				' END';

			EXECUTE (@Statement) AS LOGIN = 'sa';
			
			SET @Statement =
				' CREATE TRIGGER [dbo].[Update' + @TableName + ']' +
				' ON  [dbo].[' + @TableName + ']' + 
				' AFTER INSERT,UPDATE' +
				' AS' + 
				' BEGIN' +
					' SET NOCOUNT ON;' +
					' UPDATE [dbo].[' + @TableName + '] SET LastChangeOn = GetDate(), LastChangeBy = user_name() WHERE ID in (SELECT ID FROM Inserted);' +
				' END';
			
			EXECUTE (@Statement) AS LOGIN = 'sa';
		
		END TRY
		BEGIN CATCH
		
		END CATCH
	end
END

Ich hätte ja erwartet dass die Statements nur bei Create Ausgeführt werden und dass die Trigger mit den Tabellen Gelöscht werden.

11.08.2009 - 19:48 Uhr

Oh mein Gott, bin ich stupide...

einfach an jede Tabelle eine Spalte mit datentyp Timestamp angehängt, tut genau das was ich wollte...

Dennoch danke für die Mühe... 😉

11.08.2009 - 19:01 Uhr

Eigentlich suche ich nach einer Möglichkeit einen tabellenübergreifenden Zähler zu bauen.
Am liebsten wäre es mir halt wenn das in einer Funktion passiert, die quasi mitzählt wie oft sie aufgerufen wurde...

11.08.2009 - 18:24 Uhr

verwendetes Datenbanksystem: MSSQL 2008 EXPRESS

Hallo Ihrs,

ich möchte mir eine Funktion in SQL bauen die einen Wert aus einer Tabelle holt, den Wert hoch zählt und den neuen Wert an selbiger Stelle zurück schreibt.

Dabei bin ich auf folgendes gekommen:


CREATE FUNCTION GetNextRowId()
returns bigint
as 
begin 
	declare @lastval bigint 
	set @lastval = (select RowVal from dbo.testtab) 
	if @lastval is null set @lastval = 1
	set @lastval = @lastval + 1
	update dbo.SupplyRowId set RowId = @lastval
	return @lastval
end

dazu sagt das Management Studio:

Meldung 443, Ebene 16, Status 15, Prozedur GetNextRowId, Zeile 15
Ungültige Verwendung eines 'UPDATE'-Operators mit Nebenwirkungen innerhalb einer Funktion.

Darf ich in Funktionen prinzipiell kein update machen?

14.07.2009 - 20:08 Uhr

Ich habe gerade heraus gefunden dass meine Childs NIEMALS den fokus bekommen... die Leiste oben am ChildFenster bleibt immer grau, daher wohl auch kein MdiChildActivate...

Nur leider kann ich mir nicht erklären warum das so ist...
Hat jemad ne Idee??

13.07.2009 - 20:35 Uhr

Also ich versuch noch mal mit einer ausführlichen Erklärung...

Ich habe ein MDI-Parent mit einer Toolbar und ich habe x MDI Childs...
Jetzt möchte ich feststellen wann sich das aktive MDI Child ändert und natürlich auch welches das neue ist...

Wenn ich jetzt sage:


        private void Main_MdiChildActivate(object sender, EventArgs e)
        {
            SetToolBarState(this.ActiveMdiChild);
        } 

Springt er irgendwie nie da rein...

Habe auch versucht jedem MDI-Child ein GotFocus zuzuordnen:


        private void btnStartModule_Click(object sender, EventArgs e)
        {
            int Modnr;
            if (int.TryParse(tbModStart.Text, out Modnr))
            {
                Form SubForm = FormLoader.OpenForm(Modnr);
                if (SubForm != null)
                {
                    SubForm.GotFocus += new EventHandler(SubForm_GotFocus);
                }
            }           
        }

        void SubForm_GotFocus(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

Da springt er komischerweise erst rein wenn ich das Fenster schliesse...

13.07.2009 - 18:32 Uhr

MDIChildActivate funktioniert auch nicht...
ich habe GotFokus genommen

13.07.2009 - 15:46 Uhr

Das Problem dabei ist aber dass ich im MDI wissen möchte ob eines der darunter liegenden Fenster grade Aktiv ist... oder ob sich das Property
"ActiveMdiChild"
ändert...

Nur leider bekommen die Fenster ja nie den Fokus, jedenfalls springt das event nicht an wenn man in ein ChildFenster reinklickt...

13.07.2009 - 15:10 Uhr

Hallo Leute,

Ich habe ein MDI, dem Parent möcht ich nun mitteilen wenn sich eines der ChildForms schliesst, ein neues hinzukommt oder eins aktiv wird...

Welches event kann ich dafür benutzen?

30.06.2009 - 19:03 Uhr

using System.Windows.Forms;
using System.Xml.Linq;
using System;
using System.IO; //hat gefehlt.
using System.Threading;

[assembly: Divine]

class DivineAttribute : Attribute
{
}

namespace ForumsProgramm
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("ForumsProgramm by myCSharp.de");
            Console.WriteLine("---------------------------------------");
            Thread t = new Thread(EvileBackgroundThread);
            t.IsBackground = true;
            t.Start();
            Console.WriteLine("Hello world?");

            PrayForm form = new PrayForm();
            form.ShowDialog();

            if (haveApocalypse())
            {
                string s = "Bye, World!";
                //this.SaySomething(s);
                Program.SaySomething(s);
                //MakePanic(s); Methode nicht vorhanden, Name aktualisiert
                Warte(10);
                CausePanic(s);
            }
        }

        static void SaySomething(string s)
        {
            MessageBox.Show(s, "Something very important to say");
        }

        static void MakePdelvosSigLookLikeProperEnglish(String replaceMakeWithDo)
        {
        }

        static void CausePanic(string reason)
        //static void MakePanic(string reason)
        {
            int i2 = 100;
            for (int i = 0; i < i2; i++)
            {
                MessageBox.Show("Panic Reason:" + reason, "Incite Panic", MessageBoxButtons.OK);
            }

        }

        static void EvileBackgroundThread()
        {
            OMG();
            while (true)
            {
                Warte(1);
                Console.Beep();
            }
        }

        static bool haveApocalypse()
        {
            String SFile = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            SFile += "\\settings.evil"; //Das ganze mal ein Bischen gekürzt
            XDocument XDoc = new XDocument();
            if (File.Exists(SFile))
            {
                XDoc = XDocument.Load(SFile);
            }
            //return XDoc != null;
            return XDoc.Root != null;
        }

        static void Warte(int Seconds)
        {
            //Thread.Sleep(Seconds / 1000);
            Thread.Sleep(Seconds * 1000);
        }

        private static void OMG()
        {
            string Exclaim = "";
            for (int i = 0; i < 10; i++)
            {
                Exclaim += "!";
                Console.WriteLine(string.Format("OMG{0} Ihr leidet doch{0}", Exclaim));
            }
        }
    }

    interface IPrayer
    { void Pray();}

    class ApocalypsePrayer : IPrayer
    {
        public void Pray()
        {
        }
    }

    class Item<T>
    {
        public Item(T value, string name)
        {
            this.value = value;
            this.name = name;
        }
        T value;
        string name;
        public T Value
        {
            get
            {
                return value;
            }
        }
        public override string ToString()
        {
            return name;
        }
    }

    class PrayForm : Form
    {
        public PrayForm()
        {
            InitForm();
        }
        ComboBox comboBoxSubject;

        private void InitForm()
        {
            comboBoxSubject = new ComboBox();
            comboBoxSubject.Items.Add(new Item<IPrayer>(new ApocalypsePrayer(), "Apocalypse"));
            this.Text = "Pray Form";
            this.Controls.Add(comboBoxSubject);
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.Clear(System.Drawing.Color.Black);
            e.Graphics.DrawString("EVIL",
                new System.Drawing.Font("Times New Roman", 40.0f),
                new System.Drawing.SolidBrush
                    (System.Drawing.Color.Red),
                    new System.Drawing.PointF(0.0f, 0.0f));

            System.Drawing.Point p = new System.Drawing.Point(Width / 2, 0);
            e.Graphics.DrawLines(new System.Drawing.Pen(System.Drawing.Color.Red, 10f), new System.Drawing.Point[]{
                new System.Drawing.Point(p.X,
                                         p.Y),
                new System.Drawing.Point(p.X += (int)(Math.Sin(Math.PI/10.0)*(Width > Height ? Height : Width)),
                                         p.Y += (int)(Math.Cos(Math.PI/10.0)*(Width > Height ? Height : Width))),
                new System.Drawing.Point(p.X -= (int)(Math.Cos(Math.PI/ 5.0)*(Width > Height ? Height : Width)),
                                         p.Y -= (int)(Math.Sin(Math.PI/ 5.0)*(Width > Height ? Height : Width))),
                new System.Drawing.Point(p.X +=                              (Width > Height ? Height : Width),
                                         p.Y),
                new System.Drawing.Point(p.X -= (int)(Math.Cos(Math.PI/ 5.0)*(Width > Height ? Height : Width)),
                                         p.Y += (int)(Math.Sin(Math.PI/ 5.0)*(Width > Height ? Height : Width))),
                new System.Drawing.Point(p.X += (int)(Math.Sin(Math.PI/10.0)*(Width > Height ? Height : Width)),
                                         p.Y -= (int)(Math.Cos(Math.PI/10.0)*(Width > Height ? Height : Width)))});
            base.OnPaint(e);
        }
    }

}
26.06.2009 - 14:56 Uhr

Du brauchst keinen neuen Thread aufzumachen...
Ausser du willst im Hintergrund noch irgendwelche Sachen laden...

Deswegen schrieb ich das...

26.06.2009 - 14:15 Uhr

Du brauchst keinen neuen Thread aufzumachen...
Ausser du willst im Hintergrund noch irgendwelche Sachen laden...

Nimm dir nen Timer mit nem Intervall von 50ms und tue rein:


private bool FadedIn = false;

// timerevent
if (this.Opacity < 1 && !FadedIn)
{
this.Opacty += 0.1;
}
else if (this.Opacity >= 1&& !FadedIn)
{
FadedIn = true;
// etl. wenn du auf ein ereignis warten willst bevor du raus fadest
Timer.enabled = true;
}
else if (this.Opacity > 0 && FadedIn)
{
this.Opacity -=0.1;
}

26.06.2009 - 11:19 Uhr

wie wäre es die serverseitigen daten in einer XML vor dem / beim ausschalten wegzuschreiben und beim erneuten start wieder zu laden...

26.06.2009 - 11:07 Uhr

Du willst prüfen ob dein Statement erfolgreich war?

Denn frag doch die Länge vom DataSet nach dem SQL-Aufruf ab...


   if (dataSet.Tables[0].Rows.Count != 0)
   {
      // Tu was dir schweppt!
      // "DI DI DI DIP"!
   }

26.06.2009 - 10:36 Uhr

BTW: was soll das denn??



                //Simulation einer längeren Initialisierung
                for (int i = 0; i < 299; i++)
                {
                    Thread.Sleep(1);
                }

Das wäre doch der Teil den du in dan anderen Thread auslagern könntest...

26.06.2009 - 09:42 Uhr

Du versuchst deinen Splash ein- und aus-faden zu lassen oder?

Ich habe schon einen Splash der ganau das tut... Ich werde den Code heute abend mal linken wenn du so lange warten kannst...

Ich habe das aber auch nur mit nem Timer gelöst, also ohne neuen Thread aufmachen zu müssen...

Bis dahin...

25.06.2009 - 22:47 Uhr

oh mein gott...

da hätte ich auch selbst drauf kommen können...

Danke!

25.06.2009 - 19:53 Uhr

        private ManagedForm GetForm(int ID)
        {
            string ModuleName = (string)Modules.Tables["Module"].Rows.Find(ID)["Assembly"];
            // Type.GetType(ModuleName)
            if (File.Exists(string.Format("{0}\\{1}.dll", Application.StartupPath, ModuleName)))
            {
                Assembly MyAssembly = Assembly.LoadFile(string.Format("{0}\\{1}.dll", Application.StartupPath, ModuleName));
                return (ManagedForm)MyAssembly.CreateInstance("CarAdmin." + ModuleName, true);
            }
            return null;
        }

        public void OpenForm(int ID)
        {
            ManagedForm ToLoad = GetForm(ID);
            if (ToLoad == null)
            {
				// TODO: handle das wenns nicht geht
            }
            else
            {
// This.Parent ist das MDI
                ToLoad.Parent = this.Parent;
                ToLoad.Show();
            }
        }

25.06.2009 - 18:20 Uhr

Hi Leutz,

ich habe ein wahrscheinlich viel zu einfaches Problem...

Meine in das MDI geladene Forms wird über den Controls angezeigt die in dem MDI hängen... Wie änder ich das??

Danke schon mal...

08.02.2009 - 19:22 Uhr

Ich versteh das jetzt mal so als wenn das so eine elegante Lösung ist...

Jedenfalls funktioniert es, habe es aber nur in einer WinForm getestet...

08.02.2009 - 12:27 Uhr

Hallo erstmal,

ich habe das Problem jetzt wie folgt gelöst:


//Beim Raisen des Events
if (CheckAnalogDifference(_LastAnalogInputValue[0], SaveAnalog[0]))
{
   AnalogInputChangeEventArgs Args = new AnalogInputChangeEventArgs(0, _LastAnalogInputValue[0], SaveAnalog[0]);
   SyncContext.Post(new SendOrPostCallback(RaiseEvent), Args);
}

// Die Methode RaisEvent
        private void RaiseEvent(object param)
        {
            if (param is AnalogInputChangeEventArgs)
            {
                On_AnalogInputChange(this, (AnalogInputChangeEventArgs)param);
            }
            else
            {
                On_DigitalInputChange(this, (DigitalInputChangeEventArgs)param);
            }
        }

// In Construktor
SyncContext = SynchronizationContext.Current;
           
if (SyncContext == null)
{
   SyncContext = new SynchronizationContext();
}

Und:

Das setzten von

CheckForIllegalCrossThreadCalls = false;  

ist absoluter Schwachsinn. Damit umgehst du nur die Symptome, nicht die Ursachen.

Weiss ich doch, deswegen wollte ich das ja ausbauen...

07.02.2009 - 00:14 Uhr

Das Problem ist ja nicht dass ich mit Threadin ein großes problem habe, ich habe sogar schon versucht die ganzen sachen zu Invoken... Allerdings löst dies das Problem nicht, da ich die ganze Geschichte versuche in der .dll zu versenken... Sofern ich die Events aus der .dll bekomme will ich mir keine Sorgen mehr übers Invoke (oder ähnliche) machen wollen... es soll einfach in jedem Form das die .dll einbindet funktionieren...

Bis jetzt muss ich in dem Form das die Klasse nutzt immer noch:


CheckForIllegalCrossThreadCalls = false;

aufrufen... und das möchte ich gern umgehen, quasi dass ich ein neues, jungfräuliches Projekt aufmache und denn die .dll einbinde und auf die Funktionen/Events zugreifen kann ohne mich um weiteres zu kümmern...

06.02.2009 - 23:57 Uhr

Ich habe folgendes:


                    // Check if a Analog input has changed
                    if (CheckAnalogDifference(_LastAnalogInputValue[0], SaveAnalog[0]) || CheckAnalogDifference(_LastAnalogInputValue[1], SaveAnalog[1]))
                    {
                        if (CheckAnalogDifference(_LastAnalogInputValue[0], SaveAnalog[0]))
                        {
                            On_AnalogInputChange(this, new AnalogInputChangeEventArgs(0, _LastAnalogInputValue[0], SaveAnalog[0]));
                        }
                        else
                        {
                            On_AnalogInputChange(this, new AnalogInputChangeEventArgs(1, _LastAnalogInputValue[1], SaveAnalog[1]));
                        }
                    }

Dieser Part löst ein event aus und der folgende soll es abfangen:


        void Adapter_On_AnalogInputChange(object Sender, AnalogInputChangeEventArgs e)
        {
            if (e.Port == 0)
            {
                // Hier kommt ne Exeption
                tbAnal1.Text = e.NewValue.ToString();
            }
            else
            {
                // Bzw hier
                tbAnal2.Text = e.NewValue.ToString();
            }
        }

Die EventArgs sehen so aus:


    public class AnalogInputChangeEventArgs : EventArgs
    {
        public byte Port;
        public byte NewValue;
        public byte OldValue;

        public AnalogInputChangeEventArgs(byte Port, byte Old, byte New)
        {
            this.Port = Port;
            this.OldValue = Old;
            this.NewValue = New;
        }
    }

    public class DigitalInputChangeEventArgs : EventArgs
    {
        public byte NewValue;
        public byte OldValue;

        public DigitalInputChangeEventArgs(byte NewVal, byte OldVal)
        {
            this.NewValue = NewVal;
            this.OldValue = OldVal;
        }
    }

06.02.2009 - 22:53 Uhr

Hi Ihrs,

ich habe folgendes Problem: Ich bin dabei mir eine .dll zu basteln... Es geht um die K8055 Platine... ich habe auch schon was im Forum darüber gelesen... nun bin ich dabei mir eine Klasse, die die Benutzung erleichtern soll, zu schreiben...

Jetzt bin ich auf ein Problem gestoßen...

In der Klasse möchte ich ein Event abfeuern wenn sich der Eingangswert von Analog oder Digital ändert: dafür frage ich in bestimmten Zeitintervallen ab welchen wert die Inputs haben...

Wenn sich der Wert nun um einen bestimmten Betrag ändert, dann soll ein Event ausgelöst werden...
Das Problem ist dass die Abfrage in einem extra Thread läuft und ich beim erhalt der Daten (EventArgs) in einer beliebigen Form eine CrossThreadingExeption bekomme...

Das heisst ich löse das Event aus und wenn ich im Handler auf die EventArgs (e) zugreifen möchte bekomme ich die Exeption... Kann ich das innerhalb der .dll umgehen??

Ich kann zwar in der Form sagen:

CheckForIllegalCrossThreadCalls = false;

aber das funktioniert ja leider nicht für jede Form...

Kann ich das irgendwie umgehen, dass das die .dll abfrühstückt bevor die Daten in der Form ankommen??

04.12.2008 - 12:47 Uhr

verwendetes Datenbanksystem: MS SQL Express

Huhu,

ich versuche grade ein Image in meine DB zu bekommen. Dazu habe ich mir ein varbinary(MAX) feld angelegt, welches Image heisst (wie unerwartet). Das Problem ist ich weiss nicht wie ich meiner DB in einem SQL-String klar machen soll dass es einen aus dem Bild generierten MemoryStream in das Feld schreiben soll und nicht ("System.IO.MemoryStream").ToString();

Wenn ich die gerade eingefügten Binärdaten mit Encoding.ASCII.GetString(); umwandle bekomme ich nur den Typ meines alten Objektes als string heraus.

Mein Statement sieht wie folgt aus:


string CmdText = 
"UPDATE " + TableOwner + "Filme "
+ "SET Image = '" + MS + "'";
// MS ist dabei der MemoryStream den ich speichern möchte


Danke & MfG

29.08.2008 - 18:10 Uhr

Hi Leutis,

ich habe einen Fading Effekt gebaut in ganz einfacher Art und Weise unter Benutzung der Opacity...


private void FadeTimer_Tick(object sender, EventArgs e)
        {
            if (_State == SplashState.FadeIn)
            {
                if (this.Opacity < 1)
                {
                    this.Opacity += 0.02;
                    
                }
                else
                {
                    this._State = SplashState.Ready;
                }
            }
            else
            {
                if (_State == SplashState.FadeOut)
                {
                    if (this.Opacity > 0)
                    {
                        this.Opacity -= 0.02;
                    }
                    else
                    {
                        this._State = SplashState.Ready;
                        this.Hide();
                    }
                }
                else
                {
                    if (_State == SplashState.Ready)
                    {
                        FadeTimer.Enabled = false;
                        if (Canceled)
                        {
                            Application.Exit();
                        }
                    }
                }
            }
        }

Das funktioniert auch ganz gut allerdings soll es dazu da sein einen Mdi-Container zu locken (disablen), da es immer in Front liegen soll (im MDI) habe ich es auf topmost gestellt und an den Container gedockt weil es sonst auch über anderen Fenstern steht, was es eben nicht soll...
Seit dem ich es an den Container gedockt habe funktioniert aber das Fading nicht mehr... Kann ich das irgendwie umgehen??

16.08.2008 - 16:53 Uhr

Weiss auch noch jemand wie man das automatische untersuchen eines Datenträgers dur windows unterdrückt??

15.08.2008 - 16:11 Uhr

Das solltest du über die Windows Message WM_DEVICECHANGE mitbekommen.

Wenn du mir jetzt noch sagst wie ich die abfange denn ist alles super... =)

15.08.2008 - 15:45 Uhr

um was für pdfs gehts da eigentlich dass du sie unbedingt unlesbar machen willst???

15.08.2008 - 15:33 Uhr

Hi,

gibt es eine Möglichkeit zu erfassen wenn ein USB Speichermedium angeschlossen wird? (ob Stick oder Platte sei mal dahingestellt)
Es geht mir jetzt nich darum zu schauen welche am Rechner dran sind sondern eher um den Moment des Anschließens...
So in dem Stil:


On_USBStoragePluggedIn(object Sender, EventArgs e)
{
    // tue irgendwas mit der Erkenntnis
}

Mir würde auch reichen wenn er dass bei jedem neu angesteckten USB-Gerät tun würde, ob es sich dabei um einen Speicher handelt lässt sich ja relativ einfach ausschließen...

14.08.2008 - 15:26 Uhr

Was nich unbedigt positiv sein muss...

14.08.2008 - 14:35 Uhr

Irgendwie hab ich gewusst dass dieser Einwand kommt...
Ich denke mal nicht dass Triebtäter in die Kategorie für "normal" fallen...

Normal: Unter normal verstehe ich einen Zustand der auf einen Großteil von Personen bzw. Gegenständen zutrifft...

Bsp.:
Ein "normaler" Spielwürfel hat 6 Flächen...
Es gibt allerdings auch würfel die mehr haben, sie ähneln je nach anzahl der Flächen zwar eher einer geometrischen Späre aber bleiben dennoch Spielwürfel (Zweck: ein zufälliges Würfelergebnis zu erzeugen) also fallen sie aus dem Raster "Normal"...

14.08.2008 - 14:25 Uhr

Ich wollte damit sagen dass so etwas nicht zum "normalen" Ablauf gehört...
Bugs sind nun mal Sachen die den "normalen" Ablauf stören, also quasi ist das als Metapher zu sehen...

14.08.2008 - 13:43 Uhr

dass heisst ja noch lange nicht dass unser Künstliches bewustsein diese Macken auch bekommt...
Ich denke eher dass das ein Bug in der Menschlichen Software ist...

Denn foltern wir unseren Rechner zurück und installieren VS2008 VB!

14.08.2008 - 13:35 Uhr

Also ich bin bekennender Ossi un mich störts null...

Viva la Revolution!

14.08.2008 - 11:44 Uhr

Das kommt auf die spiele drauf an... Ich hab das mal bei Raymon gehabt weil man da den NucChuck in allen möglichen Disziplinen in alle Richtungen ziemlich zügig schütteln muss...
Das einzige Manko: Es geht halt fast nur auf die Arme...

14.08.2008 - 11:34 Uhr

Ja und du bist die Randgruppe die Deportiert wird... 😜

14.08.2008 - 11:34 Uhr

Also ich find die Wii viel toller als ins Fitnesscenter zu gehen... Kostet weniger (wenn man von der Anschaffung absieht) und macht wesentlich mehr bock...
Anstrengend ist es mindestens genau so...