Dies ist eine Antwort auf eine vorherige Frage How to display a clock with the current time in a Windows Core IoT app? modelliert, erhalte ich eine Ausnahme: "Die Anwendung rief eine Schnittstelle, die für einen anderen Thread marshalled wurde." Wenn ich die Eigenschaft mit einem Klickereignis ändere, funktioniert die Bindung.Clock-Programm mit ThreadPoolTimer C# uwp
public class RunClock: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
ThreadPoolTimer _clockTimer = null;
private string clock="";
public string Clock
{
set
{
clock= value;
this.OnPropertyChanged();
}
get { return clock; } }
public RunClock()
{
_clockTimer = ThreadPoolTimer.CreatePeriodicTimer(_clockTimer_Tick, TimeSpan.FromMilliseconds(1000));
private void _clockTimer_Tick(ThreadPoolTimer timer)
{
DateTime datetime = DateTime.Now;
Str1 = datetime.ToString();
}
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
und XAML:
<TextBlock Margin="15" Name="timec" Text="{x:Bind Path=RunClock.Clock, Mode=OneWay}"></TextBlock>
Vielen Dank im Voraus!
aktualisieren, Arbeitscode:
public class test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
ThreadPoolTimer _clockTimer = null;
private string str1 = "";
public string Str1
{
set
{
str1 = value;
this.OnPropertyChanged();
}
get { return str1; }
}
public test()
{
_clockTimer = ThreadPoolTimer.CreatePeriodicTimer(_clockTimer_Tick, TimeSpan.FromMilliseconds(1000));
}
async private void _clockTimer_Tick(ThreadPoolTimer timer)
{
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
DateTime dt = DateTime.Now;
Str1 = dt.ToString();
});
}
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
XAML (test1 ist eine Instanz er Ansichtsmodell):
<TextBlock Margin="15" Name="timec" Text="{x:Bind test1.Str1, Mode=OneWay}"></TextBlock>
Mit yo UR-Code Ich habe 'System.NullReferenceException' "Zusätzliche Informationen: Objektreferenz nicht auf eine Instanz eines Objekts festgelegt." Aber ich suchte es und fand Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (CoreDispatcherPriority.Normal,() => {UI-Code}); und es hat funktioniert. Vielen Dank! – rur2641
@ rur2641 Ja. Eigentlich habe ich das gemeint. Ich werde die Antwort aktualisieren – Archana
können Sie bitte diese Frage überprüfen? http://stackoverflow.com/questions/37508726/using-threadpooltimer-with-background-audio-uwp – yalematta