Laden...
O
onfire84 myCSharp.de - Member
Softwareentwickler Aachen Dabei seit 03.06.2009 11 Beiträge
Benutzerbeschreibung

Forenbeiträge von onfire84 Ingesamt 11 Beiträge

28.11.2016 - 15:17 Uhr

Hallo Community,

ich versuche mich gerade an einem Prozess der protokolliert werden soll.
Der Kontext ist folgender. Ich schreibe eine Website für einen BuildServer aus dem lokalen Netzwerk. Dort soll per Knopfdruck ein Setup erzeugt werden (via command line) und die Ausgabe soll protokolliert werden.

Ich habe versucht mein Beispiel herunterzubrechen, in dem eine Schleife durchlaufen wird und der Index in eine Listbox geschrieben wird.

Mein Problem ist, das erst die Zeilen in der Listbox auftauchen, sobald der Prozess durch ist und nicht währenddessen.

Entwicklungsumgebung Visual Studio 2015

Mein Beispiel sieht so aus:


<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
    Inherits="_Default" %>

<html>
<head runat="server">
    <title>Build Server</title>

    <h3 align="center">Start build process</h3>
</head>
<body>
    <form id="form1" runat="server">

        <asp:ScriptManager ID="ScriptManager1" runat="server" />

        <asp:UpdatePanel runat="server" ID="UP1">
            <ContentTemplate>
                <table id="BuildTable" border="0">
                    <thead>
                        <tr>
                            <td>Build</td>
                            <td>
                                <asp:Button
                                    ID="BtnStartBuild"
                                    Text="Build Setup"
                                    OnClick="BtnBuildTrunk_Click"
                                    runat="server" />
                            </td>
                            <asp:ListBox
                                AutoPostBack="true"
                                ID="lstConsole"
                                runat="server"
                                Height="500px"
                                Width="1000px" />
                        </tr>
                    </thead>
                </table>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>

und mein C# Code:


public void BtnBuildTrunk_Click(Object sender, EventArgs e)
    {
        for (int i = 0; i < 1000; i++)
        {
            lstConsole.Items.Add(i.ToString());
        }      
    }

Kann mir jemand einen Hinweis geben was ich falsch mache.

03.08.2010 - 11:20 Uhr

So, hab es nun unter Verwendung der Methode von rber wie folgt umgesetzt:


foreach (Control crtl in this.Controls)
{
        IEnumerable<Control> list = GetChildControlsRec(crtl);

        foreach (Control control in list)
        {
                if (control is ComboBox)
                {
                        control.Enabled = true;
                }
                else
                {
                        control.Enabled = false;
                }
        }
}

Danke für die Hilfe

03.08.2010 - 10:23 Uhr

@rber

Diesen Ansatz hatte ich ja wie gesagt auch schon verfolgt.

Also, ich denke diesen Weg hab ich schon versucht, jedoch kam ich über den SpliterContainer nicht an die darunterliegenden Controls heran, was mich eigentlich schon wundert.

@inflames2k - werde ich mal probieren

03.08.2010 - 09:58 Uhr

Hallo Community,

ich habe folgendes Problem:

Auf einer Form liegen:

  1. SplitContainer mit diversen Control z.B.: ein Grid etc.
  2. MenuStrip

Was ich erreichen will ist das bestimmte Controls (Combobox und noch ein paar Label) enabled = true bleiben, während alle anderen enabled = false sein sollen.

Den Ansatz den ich bei der Suche gefunden hatte ist dieser hier:


foreach (Control control in this.Controls)
{
     if (control is ComboBox)
     {
          control.Enabled = false;
     }   
}

Hier werden auf der Form jedoch nur die 2 o.g. Controls gefunden und nicht der Rest. Nun dachte ich mir das ich dann jeweils von z.B. dem SplitContainer auch die ControllCollection durchsuchen muss.
Hier stellte sich heraus das ich über diesen Weg nur an die SplitterPanels des SplitContainers herankam.


foreach (Control control in this.Controls)
{
     if (control is SplitContainer)
     {
          foreach (Control ctl in control.Controls)
          {
               if (ctl is SplitContainer)
               {

        
                }
          }
}

Die Frage die ich mir Stelle ist, wie ich an die anderen Controls herankomme?

Kann mir da jemand einen Hinweis geben?

14.06.2009 - 11:50 Uhr

Hmm stimmt, jetzt wo du es sagst 😄

14.06.2009 - 10:29 Uhr

Hat den niemand eine Idee? =(

12.06.2009 - 16:42 Uhr

Hallo zusammen,

Zuerstmal möchte ich sagen das ich kein Profi bin was Cryptographie betrifft =)

Ich habe ein kleines Tool in Java welches eine Signatur erzeugt. Diese Signatur kann man dann mit dem Public-Key verifizieren.

Das sieht wie folgt aus:



private static String public_key =  "MIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZp"

...

 private PublicKey GetPublicKey()
	{
        //Die Funktion erstellt aus dem String Public_Key einen Key vom Typ
        //PublicKey
        byte[] decKey;
        try
		{
			decKey = Base64.decode(public_key, Base64.DONT_BREAK_LINES);

			X509EncodedKeySpec _pubKeySpec = new X509EncodedKeySpec(decKey);

			KeyFactory keyFactory = KeyFactory.getInstance("DSA");
			PublicKey Key = keyFactory.generatePublic(_pubKeySpec);
			return Key;
        }
		catch(Throwable e)
		{
            System.out.println(e.getMessage());
            return null;
        }
    }



public boolean CheckSignature()
	{
		try
		{
			if(_Filename.isEmpty()) return false;
			PublicKey _pubKey = GetPublicKey();

			//Signature wird gelesen
			String strSignature = GetSignature();
			byte[] byteSignature = Base64.decode(strSignature);

			String strSignatureBase  = CreateSignatureFromFile();
			byte[] byteSignatureBase = strSignatureBase.getBytes();

			Signature sig = Signature.getInstance("DSA");
			sig.initVerify(_pubKey);

			//Die Lizenz wird in das Signature-Objekt geladen
			//sig.update(byteSignatureBase, 0, byteSignatureBase.length);
			sig.update(byteSignatureBase);

			//Die Lizenz wird mithilfe der Signatur verifiziert
			_SignatureValid = sig.verify(byteSignature);

			//Wenn die Pruefungen bis hierher nicht erfolgreich sind
			//springe raus
			return _SignatureValid;
		}
		catch(Throwable e)
		{
			System.out.println(e.getMessage());
			return false;
		}
    }

Wenn ich das nun mit C# abbilden möchte fällt mir schonmal auf das ich zwar einen Key in das Containerobject laden kann, hier aber auch ein Exponent benötigt wird zb.:


byte[] ba2 = Convert.FromBase64String(m_publickey);

                //X509Certificate2 myCertificate = new X509Certificate2(ba2); 

                byte[] Exponent = { 1, 0, 1 };

                RSACryptoServiceProvider verify = new RSACryptoServiceProvider();

                verify.ImportCspBlob(ba2);

                RSAParameters RSAParams = new RSAParameters();

                RSAParams.Modulus = ba2;
                RSAParams.Exponent = Exponent;


Dies ist nur ein bissl Spielerei. Mir kommt es drauf an das ich mit dem vorhandenen Public Key (siehe oben im Java Beispiel) die Signatur verifizieren kann. Mir wird jedoch nicht ganz klar wie ich das anstellen soll. Evtl. kann mir ja einer von euch einen Schubs in die richtige Richtung geben.

04.06.2009 - 10:38 Uhr

So, konnte das Problem nun wie folgt lösen:

Da meine C# DLL mit der C++ DLL kommunizieren soll habe ich aus den Strukturen von beiden DLLs den Point-Array rausgenommen.

Dieser Array wird nun als Methodenparameter übergeben, z.B.:


Kinapidll32.point[] test = new Kinapidll32.point[4];

                test[0].x = 1;
                test[0].y = 1.1;
                test[1].x = 1.6;
                test[1].y = 1.1;
                test[2].x = 1.6;
                test[2].y = 1.3;
                test[3].x = 1.0;
                test[3].y = 1.3;

                iError = Kinapidll32.IN_PlaceVectorObject_Polygon(Testuint[3], Test_Polygon(), test);


IN_PlaceVectorObjectPolygon( IN_LAYER layerID, IN_V1_POLYGON_OBJECT_NEW pObjectDesc, IN_POINT *point)
{
  ...


for(i = 0; i < pObjectDesc.pointCount; i++ )
	{	
		psBoxObject->points[i].x = point[i].x;
		psBoxObject->points[i].y = point[i].y;
	}
}

Danke nochmals für eure Hilfe =)

03.06.2009 - 18:42 Uhr

Das sind schonmal sehr hilfreiche Antworten. Werde ich Morgen früh direkt mal testen und euch das Ergebnis schreiben. Danke schonmal =)

03.06.2009 - 16:37 Uhr

Hallo zusammen,

Ich habe zu dem folgendem Thema nichts gefunden, vllt. könnt ihr mir ja helfen.

Ich habe eine c++ DLL in der folgende Strukturen vorhanden sind:



typedef struct tagApiPolygonObjectV1_NEW 
{
   IN_OBJECT_HEADER      header;
   IN_V1_POLYGON_PARMS   parms;
   USHORT                pointCount;
   IN_POINT				 points[1];
} IN_V1_POLYGON_OBJECT_NEW;

typedef struct tagApiPoint {
   DOUBLE  x;
   DOUBLE  y;
} IN_POINT, FAR *IN_POINT_PTR;


Es geht mir an dieser Stelle um


IN_POINT				 points[1];

Nun versuche ich diese Strukturen in meiner eigenen c# DLL nachzubauen um dann mit meiner DLL auf die c++ DLL zuzugreifen.

Hierzu habe ich folgendes.


public struct tagApiPolygonObjectV1 
{
       public tagApiObjectHeader      header;
       public tagApiPolygonParmsV1    parms;
       public ushort                  pointCount;
       public point[]                  points;
}

public struct point
{
        public double x;
        public double y;
}

Mit folgendem Code habe ich versucht die dynamische allokierung des Point-arrays nachzubauen.


Points = new Kinapidll32.point[4];

 

            Points[0].x = 1.0;
            Points[0].y = 1.1;
            Points[1].x = 1.6;
            Points[1].y = 1.1;
            Points[2].x = 1.6;
            Points[2].y = 1.3;
            Points[3].x = 1.0;
            Points[3].y = 1.3;

            psBoxObject.points = Points;

Ich bekomme jedoch immer folgende Fehlermeldung:

Falscher Parameter. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

Wie muss ich diese Sache angehen damit ich diese Point-array-struktur in die c++ DLL überführen kann?

Btw. die c++ DLL ist auch von mir, d.h. es können an beiden DLL's Änderungen vorgenommen werden.