Laden...

Forenbeiträge von Sebrahi Ingesamt 22 Beiträge

12.11.2021 - 04:49 Uhr

Ich dachte meine Informationen im ersten Beitrag reichen da ich davon ausging das ich was im Get und Set zwei falsch gemacht habe. Tatsächlich wie ihr sagt, lag der Fehler in der Operation. Danke auf jeden Fall für die Hilfe.

11.11.2021 - 13:15 Uhr

Danke für eure Antworten.

Wenn ich das richtig verstehe sagt ihr, dass meine Eigenschaft threadsicher ist. Problem ist ich habe es mit einer parallel.for schleife getestet. Dort habe ich 100mal die Eigenschaft um eins erhöht und am Ende kam beim Ergebnis nicht 100 raus. Sondern unterschiedliche Werte wie 97,78,67... Deshalb frag ich mich wieso nicht 100 raus kommt. Ihr sagt ja mein lock ist richtig.

Weiterhin bin ich mir unsicher was ihr mit Design-Fehler meint. Darf/Sollte man keine Statischen Eigenschaften benutzen?

11.11.2021 - 10:34 Uhr

Hallo,
ich suche nach einer Möglichkeit meine Eigenschaft im Get und Set Zweig threadsicher zu machen. Bei Eigenschaften die ich nur erhöhen möchte klappt es mit Interlocked.Increment im Set Zweig. Bei allen anderen Eigenschaften habe ich diese Lösung beim googlen gefunden und getestet aber sie Funktioniert nicht. Wisst ihr wieso?


    public partial class MyTestClass
    {
        private static object _MyObject = new object();
        private static int _MyProperty = 0;


        public static int MyProperty
        {
            get
            {
                lock (_MyObject)
                {
                    return _MyProperty;
                }
            }
            set
            {
                lock (_MyObject)
                {
                    _MyProperty = value;
                }                
            }

        }
   }

30.08.2021 - 20:27 Uhr

Hallo,
ich habe mir das NuGet-Paket "MahApps.Metro" heruntergeladen um ein HamburgerMenu zu erstellen. Die Farbgebung des Wpf wird durch folgene Zeile bestimmt:


<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/light.Brown.xaml" />

Das Theme kann auch abgeändert wie hier in der Doc beschrieben MahApps.Metro - Usage

Nun möchte ich aber die Farbe des Menüs selbst gestalten und z.b der ItemMarkierung und dem Inhalt unterschiedliche Farben geben.

Deshalb wollte ich auch die Datei finden wo light.Brown.xaml definiert ist. Aber ich habe in jeder MahApps.Metro.xaml geschaut aber diese nicht gefunden.
Ich weiß nicht wo diese Themes sein sollen. Auch die Mircosoft Doc zu den Pack URIs hat mir nicht weitergeholfen. Deshalb wollte ich euch fragen ob ihr wisst wo diese Themes zu finden sind und wie man die ändern kann.

Komplette App.xaml :


<Application x:Class="WPF_menu.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/light.Brown.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <Style TargetType="{x:Type Controls:WindowButtonCommands}" BasedOn="{StaticResource MahApps.Styles.WindowButtonCommands.Win10}" />
        </ResourceDictionary>
        
    </Application.Resources>
</Application>

25.08.2021 - 21:49 Uhr

Hallo,
danke für deine Antwort. Leider hat dies nichts verändert. Weder mit true nocht mit false.


        <DataTemplate x:Key="UserControl_1_Template" x:Shared="true">
            <local:UserControl_1/>
        </DataTemplate>
        <DataTemplate x:Key="UserControl_2_Template" x:Shared="true">
            <local:UserControl_2/>
        </DataTemplate>

25.08.2021 - 19:22 Uhr

Hallo zusammen,
mein Problem ist, dass wenn ich im Menü zwischen den UserControls wechsele, dass dann die Zustände nicht gespeichert werden.
Z.b in UserControl_2 wird ein Button deaktiviert. Aber wenn ich dann zu UserControl_1 gehe und dann wieder zu UserControl_2 Wechsel, dann ist der Button wieder aktiviert.
Dies liegt daran, dass UserControl_2 mit InitializeComponent() wieder alles neu lädt wie bei seinem Anfangszustand und da war der Button aktiviert.

Nun die frage wie ich das Problem am besten löse?


//UserControl_1.cs:
namespace My_WPF
{
    public partial class UserControl_1: UserControl
    {
        public UserControl_1()
        {
            InitializeComponent();
        }

    }
}

//UserControl_2.cs:
namespace My_WPF
{
    public partial class UserControl_2: UserControl
    {
        public UserControl_2()
        {
            InitializeComponent();
        }

        private void myButton_Click(object sender, RoutedEventArgs e)
        {
            myButton.IsEnabled = false;
        }
    }
}


//App.xaml (ohne layout):

        <x:Array x:Key="NavigationMenuItems" Type="s:String">
            <s:String>UserControl_1</s:String>
            <s:String>UserControl_2</s:String>
        </x:Array>

        <DataTemplate x:Key="UserControl_1_Template">
            <local:UserControl_1/>
        </DataTemplate>
        <DataTemplate x:Key="UserControl_2_Template">
            <local:UserControl_2/>
        </DataTemplate>

// MainWindow.xaml:

<Window.Resources>
        <Style x:Key="NavigationContentStyle" TargetType="ContentControl">
            <Setter Property="ContentTemplate" Value="{StaticResource UserControl_1_Template}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=NavigationMenuListBox, Path=SelectedItem}"
                             Value="UserControl_2">
                    <Setter Property="ContentTemplate" Value="{StaticResource UserControl_2_Template}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
</Window.Resources>

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" MinWidth="155"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <ListBox x:Name="NavigationMenuListBox" 
                 Style="{StaticResource NavigationListBoxStyle}"
                 ItemContainerStyle="{DynamicResource NavigationListBoxItemStyle}"                     
		 ItemsSource="{StaticResource NavigationMenuItems}"
        />

        <ContentControl Grid.Column="1" Style="{StaticResource NavigationContentStyle}"/>      

</Grid>


25.08.2021 - 18:27 Uhr

Vielen Danke für die Antworten. Das ist genau das was ich gesucht habe 🙂

22.08.2021 - 20:45 Uhr

Hallo Zusammen,
ich suche Ansätze zu folgendem Problem:

Der User gibt eine Antwort auf eine Frage wie zum Beispiel "Möchtest du wissen wie mein Tag war?".
Anhand des Antwort-Strings soll das Programm nun möglichst gut entscheiden, ob der User mit ja oder nein geantwortet hat.

Eine Überprüfung ob im String die Stichworte wie "ja, nein, natürlich,..." vorkommen fällt raus wenn die Antwort z.b so lautet:
"Ich habe heute keine Zeit" oder " Ich höre".

Deshalb wollte ich fragen wie man dies bei solchen Antworten löst.

VG Sebrahi

19.04.2021 - 12:51 Uhr

Vielen Dank für euere Antworten.
Bzgl. der Frage was der Zweck des Ganzen ist.
Bei den Threads in meinem Programm die lange laufen, kommt es mal vor, dass ich nach ein Paar tagen merke,
dass ein Thread nicht das tut was es soll. Um zu schauen wo der Thread hängt um den Fehler zu beheben wäre es für mich sehr sinnvoll zu wissen wo es hängt.
Also wo der Thread gerade etwas ausführt.

18.04.2021 - 18:34 Uhr

Bei einer Exception kann man ja die Zeile herausfinden wo die Exception aufgetren ist mit :


int line = (new StackTrace(ex, true)).GetFrame(0).GetFileLineNumber();

Analog möchte ich ohne das eine Exception auftrifft, außerhalb eines Threads, die Aktuell ausgeführten Code ausgeben.
Ist das möglich mit Thread oder anderweitig?


      Thread myThread = new Thread(ThreadMethod);           
      myThread.Start();            
      myThread.GetLineOfCurrentlyExecutedCode();// Dies möchte ich realisieren

10.04.2021 - 19:26 Uhr

Hallo, ich habe ein WPF Projekt. In der WPF GUI wird das Programm StartWebcrawlingParallel aufgerufen.
Diese soll mehere headless Chromefenster starten in Parallel, die nie beendet werden sollen.
Diese Chromefenster greifen auch auf eine SQL-Server Datenbank zu.

Die Fragen die ich mir stelle sind:

  • sollte ich 1) Invoke 2) Task oder 3) Thread dafür benutzen?
  • wie viele ich davon erstellen soll für die beste Leistung. Ich besitze einen 16 kerne Processor, sollte ich dann 16 Task/Threads/Invoke erstellen?
  • Ist es ok ein WPF Projekt zu benutzen für AlwaysRunning Code? Ich möchte das mein Code die ganze Zeit läuft.

         public static void WebcrawlingAlwaysRunning()
        {
            
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.AddArguments("--headless");

            var driverService = ChromeDriverService.CreateDefaultService();
            IWebDriver driver = new ChromeDriver(driverService, chromeOptions);    
        
            while (true)
            {
                //web crawling 
            }

        }
        public static void StartWebcrawlingParallel_1()
        {
            Parallel.Invoke(WebcrawlingAlwaysRunning, WebcrawlingAlwaysRunning, WebcrawlingAlwaysRunning, WebcrawlingAlwaysRunning);            
        }
        public static void StartWebcrawlingParallel_2()
        {      
            Task Task = Task.Factory.StartNew(WebcrawlingAlwaysRunning);
            Task Task2 = Task.Factory.StartNew(WebcrawlingAlwaysRunning);
            Task Task3 = Task.Factory.StartNew(WebcrawlingAlwaysRunning);            
        }
        public static void StartWebcrawlingParallel_3()
        {
            Thread thread1 = new Thread(WebcrawlingAlwaysRunning);
            Thread thread2 = new Thread(WebcrawlingAlwaysRunning);
            Thread thread3 = new Thread(WebcrawlingAlwaysRunning);
            thread1.Start();
            thread2.Start();
            thread3.Start();
        }

08.04.2021 - 12:45 Uhr

Hallo,


     public static async void Start_myMethod1_asyncron()
    {
        await Task.Run(() => {
            myMethod1();
        });
    }
    public static async void Start_myMethod2_asyncron()
    {
        await Task.Run(() => {
            myMethod2();
        });
    }

    public static void Main(string[] args)
    {

        Start_myMethod1_asyncron();
        Start_myMethod2_asyncron();

        //difference?

        Parallel.Invoke(myMethod1, myMethod2); 

    }

Tun Start_myMethod1_asyncron() und Start_myMethod2_asyncron() zusammen das Gleiche wie Parallel.Invoke(myMethod1, myMethod2)?
Kann ich asyncron()-Methoden verwenden, um Parallelität zu realisieren?

10.02.2021 - 22:19 Uhr

Wie kann ich dies effizienter erstellen?


                    MyClass Object_1 = new MyClass();
                    MyClass Object_2 = new MyClass();
                    .
                    .
                    .
                    MyClass Object_100 = new MyClass();

07.02.2021 - 19:17 Uhr

Hallo,
die Sterne im IntelliCode zeigen die bevorzugten Methoden oder Eigenschaften von einer Klasse.

Nun möchte ich bei meinen selbst erstellen Klassen auch solche Sterne erstellen um auf meine meist genutzten Methoden schneller zugreifen zu können.

Wie ist das möglich?

25.01.2021 - 19:51 Uhr

Hallo,
ich suche ein oder mehrere professionelle Bespielprojekte bzw. fertige Software(kein Tutorial) die in C# geschrieben wurden,
die ich mir dann in Visual Studio betrachten kann, damit ich sehe welche Klassen und Namespace erstellt werden, wie lang diese sind, welche Konventionen sie benutzen usw.
Am besten Projekte/Software mit Datenbankanbindung.

Kennt ihr Seiten wo ich solche Projekte finden kann?

Mit freundlichen Grüßen
Sebrahi

23.01.2021 - 13:34 Uhr

In der log steht nichts aber ich habe nun die Fehlerquelle gefunden. Die Software eXtraButtons hat den Absturz verursacht. Habe die Software beendet und nun funktioniert es wieder.

22.01.2021 - 23:22 Uhr

Hallo,
wenn ich im Projektmappen Explorer rumklicke oder nur Code schreibe (ohne etwas auszuführen) fängt Visual Studio an nicht mehr zu reagieren und startet das Projekt neu.
Ohne Fehlermeldung nichts. Er startet einfach neu nachdem er nicht reagiert hat.

Dies passiert nachdem ich das Projekt geöffnet habe nach 2-5 Minuten immer mal wieder.
Habe es auch bei einem ganz neu erstellten Projekt probiert. Das gleiche Problem.

Habt ihr eine Idee woran das liegen kann?

Viele Grüße
Sebrahi

31.12.2020 - 21:07 Uhr

Hallo,
wenn ich meine Projekt öffne und im Designer etwas veränderte und dann auf Aktualisieren drücke dann funktioniert es beim ersten mal das Updaten.
Wenn ich danach dann nochmal was verändere z.b neue spalte hinzufügen, dann erscheint ewig die Meldung Updateskript wird vorbereitet... wie unten im Bild zu sehen.

Wenn ich mein Projekt schließe und wieder öffne dann kann ich erneut einmal was ändern und danach hängt es wieder bei der nächsten Aktualisierung im Designer.

Auch bei jeder anderen Datenbank und Tabelle in diesem Projekt tritt dies auf.
Auch aktualisieren der Datenbank hat dieses Problem nicht gelöst.

Wie kann ich dieses Problem beheben?

10.10.2020 - 15:12 Uhr

Vielen Dank für die Vorschläge.

Ich habe gesehen, dass es bei SQL Server Express die Möglichkeit gibt eine lokale Datenbankdatei zu erstellen.
Welche Vor- und Nachteile hätte dies? Würde dies zu meinen Anforderungen besser passen oder ist es egal ob die Datenbank lokal ist oder nicht?

10.10.2020 - 11:22 Uhr

Hallo,
ich wollte fragen welches Datenbanksystem sich eurer Meinung nach am besten für folgende Kriterien eignet:

-Ich möchte nur in Visual Studio mit der Datenbank arbeiten.
-Ich möchte Daten von Webseiten in die Datenbank mittels C# speichern und auslesen.
-Die Datenbanksprache soll SQL sein.
-Jährlich kommen 1 Millionen Einträge dazu. (8 Millionen Einträge reichen insgesamt).
-Nur ich werde die Datenbank benutzen.
-Keine kommerzielle Verwendung
-Kostenlos bis 70€ im Jahr

Viele Grüße
Sebrahi

31.05.2020 - 09:43 Uhr

Hallo liebe Community,
mit meinen unten beschriebener Code funktioniert es ,dass ich mich auf einer Webseite einlogge und beim nächsten Start von Chrome eingeloggt bleibe.

Wenn ich aber Chrome in headless starte dann funktioniert es nicht mehr und bleibe nicht mehr eingeloggt wenn ich Chrome schließe und erneut starte.

Wie kann man dies beheben bzw. woran liegt das?

          
        static void Main(string[] args)
        {
            var chromeOptions = new ChromeOptions();        
    
            chromeOptions.AddArguments("--window-size=1920,1080");
            chromeOptions.AddArguments("start-maximized");
            chromeOptions.AddArguments("user-data-dir=C:/Users/seb/Downloads/Mein_ Chrome_Profile");  // Daten wie Cookies,Local State,Preferences usw. werden hier gespeichert
            chromeOptions.AddArguments("--no-sandbox");
            //chromeOptions.AddArguments("headless"); (Mit headless funktioniert es nicht)

            var chromeDriverService = ChromeDriverService.CreateDefaultService();
            chromeDriverService.HideCommandPromptWindow = true;            
          
            using (IWebDriver driver = new ChromeDriver(chromeDriverService, chromeOptions))
            {
                //Code zum Einloggen einer Webseite

            }

       }

25.05.2020 - 03:31 Uhr

Hallo liebe Community,
gibt es eine Möglichkeit eine Methode zu erstellen die Anweisungen in geschweiften Klammern übergibt. Als Beispiel ich erstelle folgende Methode


        public static void vier_mal_wiederholen()
        {
            for(int i=1;i<=4;i++)
            {
                // hier soll der Code rein der viermal wiederholt werden soll

            }

        }


Nun ist mein Ziel die Methode folgendermaßen aufrufen zu können.


       vier_mal_wiederholen()
      {
         MessageBox.Show("hi");
      }


Also eine Methode erstellen die die Anweisungen in den geschweiften Klammern an eine bestimmte stelle in der Methode ausführt.

Ist dies möglich in C# zu realisieren und falls ja wie ist das möglich?