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.
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?
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;
}
}
}
}
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>
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>
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>
Vielen Danke für die Antworten. Das ist genau das was ich gesucht habe 🙂
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
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.
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