Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Balaban_S
Thema: Verständnisfrage anonyme Methode innnerhalbe einer Foreach-Schleife
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Th69
das Stichwort, was du suchst heißt Closure, s.a. [Artikel] Delegaten, anonyme Methoden, Lambda-Ausdrücke & Co. (unter dem gleichnamigen Kapitel "Closures").
Dass ist es danke

Thema: Verständnisfrage anonyme Methode innnerhalbe einer Foreach-Schleife
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zuerst mal Danke für die Antwort

Zitat von T-Virus
Ich kann dir nur empfehlen den Code neuzuschreiben.
Das sieht alles sehr unschön und teilweise mit deinem umgebauten Code auch sehr gruselig aus.
Ist klar, es handelt sich hierbei wie gesagt um die verkürzte version.

Zitat von T-Virus
Da deine Queue erst nach dem füllen abgearbeitet wird, ist in der anonymen Methode dann auch item eben das letzte Objekt in deiner Liste.
Du solltest ggf. deine Verarbeitung umstellen von einer anonymen Methode auf eine richtige Methode und übergibst dort einfach dein Item Objekt.
Dann hast du auch nicht solche komischen Nebenwirkungen und dein Code ist auch klarer.
ja mit var scheint es zu klappen.
Zitat von T-Virus
Aber warum machst du es dir eigentlich nicht einfacher und startest einen extra Thread ....
War halt wirklich nur quick and dirty......
Zitat von T-Virus
Dann bleibt deine UI auch nicht hängen.
Meine UI bleibt nich hängen ich benutze schon Invoke(), sieht man nur hier nicht.

Gruss

Thema: Verständnisfrage anonyme Methode innnerhalbe einer Foreach-Schleife
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Forum

Ich habe vor kurzem ein Programm erstellt, dessen Funktion es sein sollte alle Verzeichnisse innerhalb eines Verzeichnisses mit dem 7-Zip-CommandLine-Tool zu packen. Für jedes Verzeichnis sollte ein Prozess gestartet werden um Ressourcen zu schonen sollte nichts parallel laufen. So schien es mir Plausibel eine Queue<Action> mit allen verzeichnissen zu erstellen und dann die Queue jeweils mit dem Process.Exited Event von 7-Zip.exe als Trigger abzuarbeiten.

In habe versucht den Code verkürzt darzustellen:


		//QuellVerzeichnis
		private string srcDir;
		//ZielVerzeichnis
		private string destDir;
		//Verzeichnisliste
		private List<String> DirectoryNames = new List<string>();
		//Aktionen
		private Queue<Action> ActionList = null;
		 private void ProcessDirectory()
		 {
            if (!string.IsNullOrWhiteSpace(textBox1.Text)&&!string.IsNullOrWhiteSpace(textBox2.Text))
            {
                srcDir = textBox1.Text;
                destDir = textBox2.Text;
            }
	    else
            {
                 return;
             }
           
            if (Directory.Exists(srcDir)&& Directory.Exists(destDir))
            {                                                           
                DirectoryNames.AddRange(Directory.EnumerateDirectories(srcDir));
		///SIGNIFIKANTER BEREICH BEGINN
                //Argumente
                var args = " a -mx9 -bd \"{1}.7z\" \"{0}\\\" -scswin";
                //Dateiname
				var fname = @"C:\Program Files\7-Zip\7z.exe";
				foreach (var item in DireDirectoryNames)
				{
					ActionList.Enqueue(() => {
                    var tmpstr = item;
                    ProcessStartInfo psinfo = new ProcessStartInfo();
                    psinfo.FileName = fname;
                    psinfo.Arguments = string.Format(args, tmpstr, tmpstr.Replace(srcDir, destDir));
                    Debug.WriteLine(psinfo.Arguments);
                    var p = new Process();
                    p.StartInfo = psinfo;
                    p.Start();
                    p.EnableRaisingEvents = true;
					//SchleifenTrigger
                    p.Exited += (o, j) =>
                    {
						GetNextProc();
                    };
					});
                }
				//Erster Aufruf
				 GetNextProc();
                ///SIGNIFIKANTER BEREICH ENDE
            }
        }
        void GetNextProc()
        {
            if (ActionList.Count > 0)
            {
                ActionList.Dequeue()();
            }
            else
            {
                MessageBox.Show("Finished");
            }
        }

Da ich die ARgument für 7-Zip vorher getestet hatte, war ich mir ziemlich sicher , dass alles reibungslos hätte funktionieren sollen, ich wurde jedoch eines anderen belehrt.

Das Programm lief zwar fehlerfrei durch, ich hatte jedoch am Ende immer nur einen Komprimierten Ordner im Zielverzeichnis und dieses hatte den Namen des letzte Verzeichnisses innerhalb des QUellverzeichnisses. Das hatte ich bisher nicht für möglich gehalten, warum auch?

Nach etwa einer Stunde kam ich durch Probieren auf die Lösung, Ich musste anstatt foreach eine for-schleife nehmen und zwar so:



                //Argumente
                var args = " a -mx9 -bd \"{1}.7z\" \"{0}\\\" -scswin";
                //Dateiname
                var fname = @"C:\Program Files\7-Zip\7z.exe";

for (int i = 0; i <  (int i = 0; i < DirectoryNames.Count; i++).Count; i++)
				var item = DirectoryNames[i];

....
Und dann lief das Programm korekt durch und verrichtete die gewünschte Arbeit.

Wie ihr seht ist das Problem jetzt ja schon gelöst nur nimmt es mich sehr Wunder wie diese Verhalten heisst und wo ich mehr darüber nachlesen kann. Ich war bisher der Meinung dass eine Anonyme Methode das Gleiche ist wie eine normale Methode und dass Variablen innerhalb des scopes neu erstellt werden insbesondere immutable-Typen wie Strings. ALso warum bleibt die Referenz quasi auf item hängen?
Ich verwende in letzter Zeit des öfteren Queue<Action> ist es nicht Ratsam oder könnt ihr evtl. etwas Anderes für solche Zwecke empfehlen?

Ich hoffe, dass ich mich verständlich ausgedrückt habe.

Thema: WebBrowser-Control: Zugriff auf activeX-Control
Am im Forum: GUI: Windows-Forms

hi
Ist ja klar object besitzt ja keine solche Methode.
Imho sollte man hier besser dynamic verwenden.

Hierzu denke ich dass man eigentlich mehr über die active-x komponente wissen sollte, wie sieht es denn mit einem Verweis auf die Typelib (Stichwort:tlbimp.exe)aus?

Vielleicht kriegt man aus dieser ein Interface generiert dann ist das ja meistens (aber nicht immer) schon die halbe Miete.
Gruss

Thema: Datenbank verschlüsseln und Passwort beim Start eingeben
Am im Forum: Datentechnologien

Hallo
Ist schon ein Bisschen her aber meines Wissens werden TableAdapter sowie TableAdapterManger - Klassen als

partial
angelegt, daher kann man dann so programmieren:



namespace WeineApp.deinDataSetTableAdapters {
        
    public partial class TableAdapterManager
    {
        public void SetConnection(IDbConnection con)
        {
            this.Connection = con;
        }
    }

}

Gruss

Thema: Erfahrungen mit Syncfusion Essential Studio (insb. Stabilität)?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von yngwie
Hoffe mein Feedback kommt für dich nicht zu spät...
Nein überhaupt nicht, habe mich auch mittlerweile dagegen entschieden, obwohl ich einen grossen Rabatt bekommen hätte.

Dank und Gruss
Balaban_S

Thema: Erfahrungen mit Syncfusion Essential Studio (insb. Stabilität)?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo

Da ich mir generell mit Einkauf von Fremdkomponeneten schwer tue, würde ich gerne wissen, ob jemand hier im Forum Erfahrungen mit den Syncfuison Tools sammeln konnte, da ich eine objektive Meinung über das Produkt brauchen würde.
Ein wichtiger Punkt wäre für mich zum Beispiel Stabilität im Desktopbetrieb.


Gruss
Balaban_S

Thema: Datentyp iqy in Windows Forms verwenden
Am im Forum: Datentechnologien

Zitat von Gogeta
Danach habe ich ACE mit JET ausgetauscht, doch dann kommt der Fehler:
Der 'Microsoft.JET.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert.

Der Provider heisst :

Microsoft.Jet.OLEDB.4.0


siehe:
Connection strings for Excel
und
Connection strings for Excel 2007
Gruss

Balaban Senol

Thema: Datentyp iqy in Windows Forms verwenden
Am im Forum: Datentechnologien

Nun ja, ich würde sagen, die Dateiendung ist OleDb ziemlich egal. Wenn du mit Sicherheit weisst, dass es eine Excel-Datei ist, spricht nichts dagegen, das mit OleDb anzusprechen. Natürlich stellt sich die Frage, ob jetzt ACE oder JET? Das solltest du schon noch herausfinden.

Zur zweiten Frage: Das hast du korrekt erfasst, dem DataSet ist es auch egal woher die Daten stammen, entscheidend ist der DataAdapter bzw. TableAdapter.

Gruss

Balaban_S

Thema: MemoryModule.net - Native DLLs aus dem Speicher laden
Am im Forum: .NET-Komponenten und C#-Snippets

Coole Sache

Ich habe mal in einem Buch gelesen, wie man Assembler code als string in c++/cli on the fly kompiliert und von .net aus ausführt. Daher an sich nichts Neues, aber tolle Leistung Respekt.
Werd ich verfolgen.

Gruss

Thema: Fremdes Text-Bearbeitungs-Programm starten und Speicher-Event abfangen
Am im Forum: Rund um die Programmierung

Zitat von Abt
Ribbons dürfen aber nicht für Textverarbeitungs(-ähnliche)-Anwendungen mit kommerziellem Hintergrund verwendet werden.
Ok kann sein, habe noch nie ein Ribbon benutzt. Und ich gebe es zu, ich habe auch noch nie dieses Control verwendet.

EDIT: Kann man anscheinend auch im XP-Mode verwenden. Also ohne Ribbon.
Gruss

Thema: Fremdes Text-Bearbeitungs-Programm starten und Speicher-Event abfangen
Am im Forum: Rund um die Programmierung

Kommt darauf an, ob dir z.Bsp. Tx Control Express reicht.

Gruss

Thema: Fremdes Text-Bearbeitungs-Programm starten und Speicher-Event abfangen
Am im Forum: Rund um die Programmierung

Hallo Paladin007
Wenn es MS-Office ist, kannst du evtl. mit der ROT (Running Object Table) etwas anstellen. Hierbei ist es möglich lafaunde Prozesse via COM anzusprechen, wenn sie COM-Interop unterstützen.
such mal bei G nach c# running object table example".

Für andere Programme, z.Bsp. Works usw. könnte es schwieriger werden, dann ist wie schon beschrieben eine Lösung via FileSystemWatcher oder so machbar.

Gruss

Thema: Alle Spalten aus zwei DataTables durch eine Abfrage bekommen
Am im Forum: Datentechnologien

Hallo Dux

Eine Lösung wäre z.Bsp. wenn du mit DataColumn.Expression-Eigenschaft arbeitest => dann kannst du direct mit einem Select die Gewünschten Daten erhalten.
Eine andere Lösung könnte sein, dass du bei der Erstellung des DataRow-Arrays
die DataRow.GetChildRows-Methode (DataRelation) verwendest.

Andere Lösungen z.Bsp. mit LinqToDataset nicht ausgeschlossen.

Gruss

Thema: [erledigt] DataAdapter - Update - Logikfehler
Am im Forum: Datentechnologien

Hi KST
Abgesehen davon, dass wahrscheinlich

AcceptChanges()
(Wo auch immer das für dich sinnvoll sein mag, ob jetzt im DataSet,DataTable oder in der DataRow) die Lösung für dein Problem ist, solltest du dir IMHO überlegen, warum du keine typisierten DataSets verwendest, das erledigt der TableAdapter dann nämlich selber.

Gruss
Balaban_S

Thema: EF code first Fehlermeldungen
Am im Forum: Datentechnologien

Ich habe jetzt vorübergehend (auf) normales EF umgestellt und es klappt ohne Probleme. Zum Glück war es nichts grosses. Code First auf dem Desktop?
(momentan) Besser nicht ;)

Gruss

Balaban_S

Thema: EF code first Fehlermeldungen
Am im Forum: Datentechnologien

Zuerst einmal vielen dank für die Antwort
Ok, das mit den EF Versionen werd ich überprüfen, die db hab ich mittlerweile gelöscht, somit kann es nicht (mehr) am connectionstring und der DB liegen.Und wo gibt es denn bei codefirst metadaten?

Das mit den Ressourcen schonen ist so eine Sache, da CE kein Verbindungspooling kennt und sowieso singleuseranwendung ist, erlaube ich mir nur einmal die Verbindung zu öffnen und beim Beenden zu schliessen.

Gruss

Thema: EF code first Fehlermeldungen
Am im Forum: Datentechnologien

SqlCe.40 EntityFrameWork 4.3.1 Code first Windows.Forms

Hallo und frohe Ostern


Ich habe eine Anwendung bei der plötzlich die Fehlermeldung:

Fehler
Der Typeninitialisierer für "System.Data.Entity.Internal.AppConfig" hat eine Ausnahme verursacht.
bei der initilaisierung des DBContextes auftaucht.

Bis vor kurzem funktionerte alles Wunderbar. Der Fehler kam aus dem Nichts.
Der Initialisierungscode:


StoreClientEntities db=new StoreClientEntities();
...
nichts weiter.

Zuerst arbeitete ich so:


StoreClientEntities db;
...
protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            db = new StoreClientEntities();
...
        }
Als dann nichts mehr ging und alle Debug-Haltepunkte übersprungen wurden wechselte ich zur oberen Version und erhielt dann eben die Fehlermeldung.



Hier noch die config:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="StoreClientEntities"
     connectionString="Data Source=|DataDirectory|\StoreClientEntities.sdf"
     providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0"
           invariant="System.Data.SqlServerCe.4.0"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

Was kann dies verursachen?

Gruss

Thema: DataGridView trotz VirtualMode benutzerdefiniert sortieren
Am im Forum: GUI: Windows-Forms

Hallo Peter

Ich würde nicht an die DataTable direkt Binden sondern an eine DataView zumindeset nach dem sortieren mit DataTableExtensions.AsDataView(T)-Methode (EnumerableRowCollection(T))
Hierbei kannst du mit Linq nach belieben sortieren. Natürlich solltest du dir die Sortierung merken.

Gruss

Thema: DataGridView mit Maßeinheiten anzeigen
Am im Forum: GUI: Windows-Forms

Hallo

Evtl kann man DataGridViewCellStyle.Format-Eigenschaft dafür benutzen.

Gruss

Thema: SQL Server CE auf Windows 7
Am im Forum: Datentechnologien

Hallo zusammen

[offtopic]

@BerndFfm

Zitat von BerndFfm
.. SQL Server Compact (so heißt er inzwischen)..


Das "CE" bedeutet doch "Compact Edition" oder?
Ist ja eigentlich nur ne Abkürzung ich schreibe manchmal einfach nur SQLCE.


[/offtopic]

Gruss

Thema: Report druckt nur einen Datensatz, Abfrage mit "IN" Statement
Am im Forum: Datentechnologien

Hallo Dimuwe

entweder verzichtest du in diesem Fall(nicht generell/nur als Workaround) auf Parameter und bildest das SQL mit einem StringBuilder oder so ODER du erstellst eine Temporäre Tabelle und speicherst deine Parameterliste dort um mit dem IN-statement darauf zugreifen zu können, denn Aufzählungen gehören nicht zu den vom SqlCeParametern akzeptierten SqlDbTypes.

Gruss

Balaban_S

Thema: DatagridView Anzeige/Formatierung einer Zeile in Abhängigkeit eines Wertes?
Am im Forum: GUI: Windows-Forms

Hallo

Wenn die ganze Zeile formatiert werden soll empfehle ich hierfür das RowPrePaint und zwar in dieser Form:


DataGridViewCellStyle CustomStyle = new DataGridViewCellStyle() { BackColor = Color.Yellow, ForeColor = Color.LightGray };

private void TheDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            if (e.RowIndex ≥ 0)
            {
                DataGridViewRow row = TheDataGridView.Rows[e.RowIndex];
                YourEntity ent = (YourEntity)row.DataBoundItem;
                if (CheckVal(ent)/*bitte implementieren*/ )
                {
                    row.DefaultCellStyle = CustomStyle;

                }
            }
        }
EDIT://
Zu beachten ist, dass im Falle einer DataTable natürlich das YourEntity in eine DataRowView gecasted werden sollte.

Gruss

Balaban_S

Thema: ConnectionString ohne Passwort im Code verwenden
Am im Forum: Datentechnologien

Hallo _pi

Ok ich gebe zu die quelle, die Ich verlinkt habe ist eine Ältere und bezieht sich noch auf VS2005. Mit VS2008 ist der TableAdapterManager hinzugekommen (hatte ich vollkommen vergessen), der wird per default erstellt. Somit kannst du diese Klasse erweitern ansprechen;


namespace DeinProjekt._pi_devDataSetTableAdapters
{
    public partial class TableAdapterManager
    {

        public void SetConnection(ByteFX.Data.MySqlClient con)
        {
            
            _connection = con;
            //Wenn TableAdapter vorhanden
            if (_mitarbeiterTableAdapter!= null)
            {
                _mitarbeiterTableAdapter.Connection = con;  
            }
            .
            .
            .
            
        }
    }
}



und im Konstruktor der Form


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

var bldr = new MySqlConnectionStringBuilder ();
            bldr.DataSource = "";
            bldr.UserID = "";
            bldr.Password = "";
            bldr.Database = "";

            tableAdapterManager.SetConnection(new MySqlConnection(bldr.ConnectionString));
        }

Was du für ConnectionErrors zu erwarten hast musst du selbst wissen. Auf jeden Fall werfen die Adapter eine aussagekräftige Exception(bzw. MySqlException) falls etwas nicht in Ordnung sein sollte und die kann man wie trashkid2000 schon geschrieben hat via try catch-Blöcke abfangen.

Gruss
Balaban_S

Thema: ConnectionString ohne Passwort im Code verwenden
Am im Forum: Datentechnologien

Ok
angepasst:


using ByteFX.Data.MySqlClient
using DeinProjekt._pi_devDataSetTableAdapters;

namespace DeinProjekt
{
   public class mitarbeiterTableAdapterConnectionManager
   {

      public static MySqlConnection GetConnection(
         mitarbeiterTableAdapteradapter)
      {
         return adapter.Connection;
      }

      public static void SetConnection(mitarbeiterTableAdapter adapter,

         MySqlConnection connection)
      {
         adapter.Connection = connection;
      }
   }
}

Gruss

Balaban_s

Thema: ConnectionString ohne Passwort im Code verwenden
Am im Forum: Datentechnologien

Hallo _pi

Zitat
...
Den Part den ich aber nicht verstehe, ist wie ich vorgehen muß, um den generierten ConnectionString ohne Passwort im Code zu verwenden
...

Dies ist ein anderes Thema und du solltest hierfür einen neuen Thread erstellen.


Zu deiner Frage.
Erstelle eine Klasse in der selben Assembly gemäss dem folgenden Beispiel:



using System.Data.SqlClient;
using NorthwindDataAccess.CustomersDataSetTableAdapters;

namespace NorthwindDataAccess
{
   public class CustomersTableAdapterConnectionManager
   {

      public static SqlConnection GetConnection(
         CustomersTableAdapter adapter)
      {
         return adapter.Connection;
      }

      public static void SetConnection(CustomersTableAdapter adapter,

         SqlConnection connection)
      {
         adapter.Connection = connection;
      }
   }
}

Quelle:
Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET
Von Brian Noyes
...............................................
Publisher: Addison Wesley Professional

Kapitel 2: Connection Management

Gruss
Balaban_S

Thema: Installationsdatei erstellen: Abhängigkeiten von Interop.Word.dll werden nicht gefunden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo

Wenn du Verweise gemäss Separate primäre Interopassemblys zum Erstellen und Ausführen von Projekten auf die Dateien in den enstprechenden Verzeichnissen:

Zitat
%ProgramFiles%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12

(oder %Programme(x86)%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12 auf 64-Bit-Betriebssystemen)

%Programme%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14

(oder %Programme(x86)%\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14 auf 64-Bit-Betriebssystemen)

hinzufügst und nicht über via Dialogfeld Verweis hinzufügen auf der Registerkarte COM sollte es funktionieren.

Gruss

Balaban_S

EDIT: Ich habe leider kein Office auf dem Laptop installiert und kann nicht mehr dazu sagen.

Thema: Installationsdatei erstellen: Abhängigkeiten von Interop.Word.dll werden nicht gefunden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo InSiDeR

Dies ist schon ein älteres bekanntes Problem und es gibt einige verschieden Lösungen dafür.
Hier nur ein paar Stichwörter und Links, welche IMO selbsterklärend sind:



Gruss

Balaban_S

EDIT: Link korrigiert

Thema: Elegante Addressierung von Tabellen und Spalten
Am im Forum: Datentechnologien

Hallo qduda

Meinst du evtl so etwas wie DataRowCollection.Add-Methode (Object[])?

Gruss

Balaban_S

Thema: Combobox angezeigten Wert anhand von Wertemember auslesen
Am im Forum: Datentechnologien

Hallo Johnny B

Also so wie ich das sehe ist der Gruppenname, vorausgestzt die ID Spalte ist als Primärschlüssel festgestzt schon so verfügbar:


var ArtikelgruppeName =
(string)bestellungenDataSet.Produktgruppe.Rows.Find(ArtikelgruppeID)[1];
Die typisierte Variante bietet soweit ich weiss gleich automatisch .FindByID()
an wenn ID als Primärschlüssel definiert ist.


Gruss

Balaban_S