Laden...
F
feadur myCSharp.de - Member
Entwickler Bonn Dabei seit 11.03.2005 722 Beiträge
Benutzerbeschreibung

Forenbeiträge von feadur Ingesamt 722 Beiträge

20.06.2008 - 12:46 Uhr

du kannst den konfigurator von 2.0 nehmen, 3.0 und 3.5 sind "nur" neue Bibliotheken für .Net, der Kern der CLR wurde aber seit 2.0 nicht verändert.
Warum es jetzt bei dir nicht geht kann ich nicht sagen, das kann viele Gründe haben. Ich würde dir aber trotzdem raten mit einer statischen Assembly Referenz zu arbeiten. Denn wenn der Drittanbieter in einer neuen Version die öffentlichen Interfaces ändert, kommst du eh nicht drum herum deine Anwendung neu zu kompilieren, auch wenn du Reflection verwendest.

20.06.2008 - 10:08 Uhr

Was willst du denn überhaupt machen? wenn du ein Assembly eines Drittanbieters verwenden willst - und du dieses kennst - solltest du deiner Anwendung eine Assemblyreferenz hinzufügen. Assembly.LoadXY sollte NUR in Late-Bind Szenarien verwendet werden, für alles andere ist Reflection einfach nicht performant genug (leider).
Es gibt außerdem unterschiede zwischen Assembly.Load, LoadFrom und LoadFile. Die Assemblies werden dann jeweils in einem anderen Fusion-Kontext geladen, d.h. auch hier könnte ein Grund für die Exception liegen. Am besten ist es, Assemblies wann immer es geht mit Assembly.Load zu laden.

19.06.2008 - 17:37 Uhr

Hallo zommi,

die abgeleiteten Klassen erzeugen sich in dieser Methode selbst. Damit hat man ein einheitliches Erzeugungsmuster für die Derivate der abstrakten Klasse und muss nicht mit Activator.CreateInstance arbeiten. Vor allem kann man dann auch die Parameter definieren, was ja mit ... where new() nicht geht.

19.06.2008 - 17:14 Uhr

hallo zommi,

ich würde ehr sowas wie


abstract class AbstractOrganizationalUnit
{
  public abstract AbstractOrganizationalUnit Create(int ID, DateTime time);
}

machen.

//EDIT: achso, und wenn überhaupt dann ehr


throw new NotImplementedException();

=)

19.06.2008 - 16:37 Uhr

Hallo zommi,

du hast hier einen kleinen Aspekt übersehen.

AbstractOrganizationalUnit ist wie der Name schon sagt abstract. Du kannst also keine Instanz davon erzeugen. Sonst würde die gesamte sache mit dem <T> ja schon von Haus aus Sinnlos sein.

Es wird ja keine Instanz von AbstractOrganizationalUnit im herkömmlichen Sinne erstellt, sondern die Methode Create aufgerufen, die dann eine konkrete Instanz liefert.

18.06.2008 - 21:47 Uhr

habe es jetzt nicht ausprobiert, aber es scheint so, als könnten Basisklassen dann nicht mit XAML deklariert werden. Ich meine sowas in der Art auch schon mal gelesen zu haben, z.b. hier:

http://forums.msdn.microsoft.com/it-IT/wpf/thread/80eb3f57-9907-4bf7-9f48-b75043b8c97b/

In current version of WPF, you cannot subclass from XAML generated classes, you need to do it in code instead .....

Trotzdem kannst du natürlich dein Basis-UserControl ohne XAML entwickeln und dann davon erben.

18.06.2008 - 17:26 Uhr

Hallo thepixel,

damit erstellst du 2 Instanzen von Control, einmal durch aufruf des konstruktors und einmal durch LoadControl.
Es reicht der Aufruf von LoadControl:


Control control = LoadControl("Pfad/Control.ascx");

18.06.2008 - 17:12 Uhr

Dann ist doch klar dass es nicht geht, bitte

</MyUserControl>

in

</custom:MyUserControl>

ändern (so wie es oben auch steht).

18.06.2008 - 17:03 Uhr

wie sieht denn deine XAML datei jetzt aus?

18.06.2008 - 16:19 Uhr
  1. dürfte nach oben stehendem code eigentlich nicht auftauchen.

Versuch mal die assembly=... Angabe wegzulassen. Die ist unnötig, da die Klasse ja im gleich Assembly definiert ist.

18.06.2008 - 15:33 Uhr

Hallo tonka,

ja das ist in XAML möglich. Bei dir klappt es nicht, weil du kein Namespace-Mapping für den CLR Namespace deiner Basisklasse erstellt hast, dann kann der WPF Parser diese Klasse natürlich nicht finden.

Versuch mal sowas:


<custom:MyUserControl x:Class="MyProject.TestUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:DeinNamespace;assembly=DeinAssembly"
    Height="300" Width="300">
    <Grid>

    </Grid>
</custom:MyUserControl >

//Edit: End-Tag war falsch.

11.06.2008 - 16:42 Uhr

Statt Type.InvokeMember besser MethodInfo.Invoke verwenden, das ist um einiges schneller.

11.06.2008 - 16:36 Uhr

So einfach ist das nicht, du musst den Code schon irgendwie in eine lauffähige Form, sprich IL Code, bringen, z.b. mit dem CSharpCodeProvider.

11.06.2008 - 16:33 Uhr

ja, das nennt sich "XCopy Deployment". Dazu gehört aber, dass du eben die Binärdateien deiner Web Anwendung kopierst, nicht die Sourcen. Viel mehr zu beschreiben gibt es da nicht, ich würde dir raten, dich im Internet oder Büchern über das Asp.Net Ausführungsmodell zu informieren, dann wird dir das sicher schnell klar.
Gruß

11.06.2008 - 13:42 Uhr

Hallo CyberHunter,

du musst natürlich auch deine Web Applikation kompilieren und die .dll entsprechend aktualisieren... .cs Dateien haben auf der Server Seite eigentlich gar nichts verloren.

10.06.2008 - 15:07 Uhr

Nein, ich möchte den Code der Methode InitializeComponent() in Windows Forms Anwendungen parsen.
Diese ist eigentlich ziemlich beschränkt, allerdings können Komponenten ihren eigenen Initalisierungscode bereitstellen. Die Code Serialisierung läuft über CodeDomSerializer Objekte, deshalb brauche ich das ganze in einem CodeDOM... =)

10.06.2008 - 14:49 Uhr

Hallo Community,

ich bin auf der Suche nach einem IL Code Parser der ein CodeDOM erzeugt. Leider bin ich bisher nicht fündig geworden. Der MSIL Code Provider erzeugt Code aus einem CodeDOM aber nicht umgekehrt. Die Anforderungen an den Parser sind auch nicht sonderlich hoch, beispielsweise müssen keine Schleifen erkannt werden.

Vielleicht kennt ja jemand von euch eine entsprechende Bibliothek.

feadur

02.05.2008 - 17:34 Uhr

Es liegt nicht am StreamReader sondern an


this.originalContent += tmp;

Dadurch wird für jede Zeile ein neues String Objekt erzeugt und alle bisher gelesenen Zeichen werden darein kopiert.

Statt String1 += String2 sollte man - abgesehen von Fällen in denen nur wenige Strings verkettet werden - IMMER StringBuilder.Append nehmen.

28.04.2008 - 22:44 Uhr

if(typeof(YourClass).IsSubClassOf(typeof(Attribute))
{
...
}

13.04.2008 - 16:46 Uhr

nimm UnicoeEncoding (UTF-16), dann bekommst du 2 bytes pro Zeichen.

07.04.2008 - 16:45 Uhr

das geht allerdings nur sofern es sich dabei um eine managed dll handelt.
ich würde dir dann auch ehr raten, nicht den object browser sondern den .Net Reflector von Lutz Röder zu nehmen.
Wenn es sich um eine native Dll handelt, könntest du schauen welche Funktionen exportiert werden, etwa mit einem Tool wie PE Explorer.

07.04.2008 - 10:34 Uhr

SELECT name FROM sqlite_master WHERE type='table'

... liefert alle Tabellennamen einer SQLite DB

05.04.2008 - 13:36 Uhr

du kannst doch einfach die zweite datei blockweise auslesen (z.b. in 1 MB blöcken) und diese dann an die erste anhängen.

04.04.2008 - 16:06 Uhr

hallo,

ein Fall für

Regex.Matches

04.04.2008 - 12:27 Uhr

Wenn du aus einem <Modul> Tag doch schon ein Objekt machen kannst bist du schon fast fertig. Bei mehreren <Modul>'s kanst du die Objekte in einer Liste halten, z.b. List<Modul>.

04.04.2008 - 10:03 Uhr

Wenn deine Xml Dateien valide sind, aber nicht in ein Schema passen, kannst du XmlReader verwenden, da dieser nicht das schema überprüft.
Bei Html ist ja gerade das Problem, dass viele Tags eben keinen End-Tag haben (<br>, <meta>, <param>...), deshalb ist html auch so schwer zu verarbeiten.
wenn du nur ganz spezielle dateien parsen möchtest könntest du es mit RegEx versuchen, bei beliebigen Html Dateien solltest du dich nach einer geeigneten Library umsehen.

03.04.2008 - 23:00 Uhr

Hallo YayaAa,

da dir anscheinend noch einige Grundlagen fehlen:

📗

03.04.2008 - 21:42 Uhr

Hi,

Das Problem ist das man da nur die typischen Sachen wie Name, Text usw. abrufen kann, sowas wie checked gibts da nicht.

Dazu musst du das Control erst zu einer CheckBox casten:


foreach(Control control in Controls) 
{
   CheckBox checkBox = control as CheckBox; 
   if(checkBox != null) {
      checkBox.Checked = true; 
      ... 
    }
}

03.04.2008 - 16:20 Uhr

Die app.xml ist jedoch für mich nicht der geeignete Ort, denn die Styles sollen auch nach dem Release der Anwendung über diese Style-Datei anpassbar bleiben, was aber nur gegeben ist, wenn die Style.xaml als eigene Datei und im Klartext im Anwendungspfad steht und nicht mit reincompiliert wird.

du kannst aber in app.xaml ein ResourceDictionary anlegen und deine (Klartext) Dictionaries als MergedDictionaries einfügen.

Dann sind die Styles global verfügbar und lassen sich auch nachträglich verändern.

03.04.2008 - 15:35 Uhr

was für fehlermeldungen gibt der designer denn genau aus?
soweit ich das verstanden habe, möchtest du deine styles global für die gesamte anwendung definieren.
der geeignete ort dafür ist die app.xaml, in der das Application objekt definiert wird. für Application.Resources kannst du dein ResourceDictionary einfügen.
Danach übernehmen alle UserControls diese Styles automatisch, ohne dass du das Dictionary jeweils neu einbinden musst.

03.04.2008 - 13:06 Uhr

Solution Explorer -> Add -> Existing Item...
Forms bestehen meistens aus mehreren Dateien (Form.cs, Form.Designer.cs...). Diese sollten also alle vorhanden sein beim Einfügen.

03.04.2008 - 12:17 Uhr

sorry, aber ich glaube ich habe dein problem immer noch nicht verstanden.
du fragst wie du an den PublicKeyToken kommst. Du willst aber vermeiden, diesen per Code abzufragen.
Statt dessen habe ich dazu geraten, den .Net Reflector zu nehmen, um an die Angabe zu kommen.
Ich wüsste nicht, was daran widersprüchlich sein soll.

03.04.2008 - 11:57 Uhr

wegen


while (lineCreatingFinished == false) { }

siehe auch [Tipp] Anfängerfehler == true / == false

03.04.2008 - 11:54 Uhr

Achso! Ich dachte du brauchst eine programmatische Lösung.
Dann nimm doch einfach den Reflector und kopier die Angabe...

03.04.2008 - 11:20 Uhr

string GetPublicKeyToken(Assembly asm)
       {
            StringBuilder sb = new StringBuilder(); 
            byte[] pk = asm.GetName().GetPublicKeyToken();
            if (pk.Length == 0)
                return "null"; 

            foreach (byte b in pk)            
                sb.Append(b.ToString("x"));             
            
            return sb.ToString(); 
        }

03.04.2008 - 10:31 Uhr

mhh warum er da hängen bleibt weiss ich auch nicht.
in deinem code verbaust du dir allerdings die vorteile des threads:


while (lineCreatingFinished == false) { }

das blockiert den UI Thread so lange bis der Worker Thread lineCreatingFinished gesetzt hat.


this.canvas1.Children.Add(line);

wäre besser in CreateLine() aufgehoben, wobei du dort den gesamten code in der anonymen Methode stehen hast. Damit wird eigentlich alles im Kontext des Hauptthreads ausgeführt.

02.04.2008 - 18:22 Uhr

Mit Dispatcher.BeginInvoke wird nicht zwangsläufig ein neues Thread gestartet. Es bedeutet nur, dass die Aufgabe in die Warteschlange des Dispatchers gestellt wird bevor sie ausgeführt wird. Dann kehrt die Methode zurück und du hast wieder die Kontrolle.
Ich mache es in meinem Projekt jetzt so, dass ich für eine längere Operation einen neuen Thread starte und von dort aus mit Dispatcher.Invoke auf den UI Thread zugreife.
Hier eine kleine Applikation die ich mir zu Demonstrationszwecken gebaut habe:


   public partial class Window1 : Window
    {        
        public Window1()
        {
            InitializeComponent();            
            this.Loaded+=new RoutedEventHandler(Window1_Loaded);
        }

        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            //Create AyncHelper for the Dispatcher of this UI Thread
            AsyncHelper.CreateInstance(Dispatcher.CurrentDispatcher);

            //Start the thread
            ThreadStart start = new ThreadStart(AsyncOperation);
            Thread thread = new Thread(start);
            thread.Start();
        }        

        void AsyncOperation()
        {
            AsyncHelper helper = AsyncHelper.Instance;
            for (int i = 0; i < 100; i++)
            {                
                // Add Button to container         
                helper.PerformAction(delegate()
                {
                    Button btn = new Button(); 
                    TextBlock1.Text = string.Format("Created instance {0} of {1}", i + 1, 100);
                    btn.Content = "Button #" + (i + 1).ToString();
                    Container.Child = btn;
                }
                );

                // Simulate longer operation
                Thread.Sleep(500);                
            }            
        }
    }

    /// <summary>
    /// Defines an operation to perform on the dispatcher's thread 
    /// </summary>
    internal delegate void AsyncOperation(); 
    
    /// <summary>
    /// Helper class for the Dispatcher
    /// </summary>
    internal class AsyncHelper
    {       
        Dispatcher _dispatcher = null;

        public static void CreateInstance(Dispatcher dispatcher)
        {
            if (_instance == null)
                _instance = new AsyncHelper(dispatcher);
        }

        static AsyncHelper _instance = null;

        public static AsyncHelper Instance
        {
            get { return _instance; }
        }

        private AsyncHelper(Dispatcher dispatcher)
        {
            _dispatcher = dispatcher;
        }

        public void PerformAction(AsyncOperation operation)
        {
            _dispatcher.Invoke(DispatcherPriority.Normal,
                operation);
        }

    }

02.04.2008 - 11:57 Uhr

Bitte beschreib dein Problem genauer.
Siehe [Hinweis] Wie poste ich richtig?

01.04.2008 - 16:40 Uhr

gute aktion! =)
und ich bin natürlich auch drauf reingefallen... 😁

01.04.2008 - 14:36 Uhr

ich kann die entscheidung des teams einen solchen schutz einzubauen, nachvollziehen. trotzdem ist das ganze wie schon gesagt recht unkomfortabel.
warum nehmen wir nicht einen "normalen" captcha schutz, also indem man einfach nur die buchstaben eintippen muss?
mich würde interessieren ob es wirklich so agressive bots gibt, die versuchen einen solchen schutz zu umgehen nur um auf mycharp.de die suchfunktion anzuwerfen.
das kann ich mir beim besten willen nicht vorstellen... =)

31.03.2008 - 23:49 Uhr

das liegt daran, dass du nach jeder Zeile eine neue Datei aufmachst und, falls schon vorhanden, den inhalt überschreibst,

31.03.2008 - 11:22 Uhr

ich glaube nicht dass man dies mit einer select abfrage machen kann, da es sich bei "wert" ja um eine zahl und nicht um einen string handelt.
du kannst aber erst den wert abfragen und ihn dann mit ToString(...) entsprechend formatieren.

31.03.2008 - 10:48 Uhr

du musst die korrekte Kodierung dem Konstruktor übergeben. Wenn es sich bei der Datei um eine Unicode Kodierung handelt, kannst du auch den Konstruktor StreamReader(string, bool = true) verwenden um die Byte Order Marks automatisch erkennen zu lassen.

30.03.2008 - 23:36 Uhr

Das hat vermutlich nichts mit dem DependencyProperty zutun, sondern mit dem Xaml Code von Window1.
Laut Call-Stack tritt die Exception auf, wenn eines der Objekte des Fensters instanziiert wird.

30.03.2008 - 12:52 Uhr

Das hängt natürlich von deinen eigenen Interessen und Fähigkeiten ab.

In der Regel werden Projektmanager besser bezahlt als Programmierer. (Ausgenommen Chefentwickler der CTO's).

Am besten wäre es natürlich, sich erstmal mit der Programmierung zu beschäftigen und danach mit Projektmanagement.

Gruß

28.03.2008 - 17:18 Uhr

myCSharp.de könnte ja mit gutem Beispiel vorran gehen und semantische Tags einbauen, durch die dann solche Ambiguitäten aufgelöst werden können... =)

Nein, war ein Witz, aber die Vorteile von solchen semantischen Netzen wünscht man sich schon des öfteren, wie ja auch jetzt wieder gesehen.

28.03.2008 - 17:09 Uhr

ok, den Dispose() Aufruf hatte ich vergessen.

28.03.2008 - 16:56 Uhr

ich nehme an wr sollen statt "Thread" demnächst "Beitrag" sagen, wenn es sich bei "Thread" um einen Beitrag und nicht um die Klasse System.Threading.Thread" handelt...

28.03.2008 - 16:34 Uhr

XmlReader liest die XML Dateien aus ohne daraus einen Baum zu ereugen. Du hast dann natürlich keine Tabellen mehr, aber eine XML Datei ist ja auch keine Datenbank... =)