C# 从不同线程读取DependencyProperty
我遇到了析构函数问题。下面是重新处理问题的代码:C# 从不同线程读取DependencyProperty,c#,dependency-properties,finalizer,C#,Dependency Properties,Finalizer,我遇到了析构函数问题。下面是重新处理问题的代码: class DPDemo : DependencyObject { public DPDemo() { } ~DPDemo() { Console.WriteLine(this.Test); // Cross-thread access } public int Test { get { return (int)GetValue(TestPr
class DPDemo : DependencyObject
{
public DPDemo()
{
}
~DPDemo()
{
Console.WriteLine(this.Test); // Cross-thread access
}
public int Test
{
get { return (int)GetValue(TestProperty); }
set { SetValue(TestProperty, value); }
}
// Using a DependencyProperty as the backing store for Test. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TestProperty =
DependencyProperty.Register("Test", typeof(int), typeof(DPDemo), new PropertyMetadata(0));
}
当析构函数运行时,我在get行上得到一个InvalidOperationException{SetValue….是否有推荐的方法从析构函数或其他线程读取依赖性属性?我建议使用IDisposable接口,并在Dispose方法中操作DependencyObject。我建议使用IDisposable接口,并在Dispose方法中操作DependencyObject。Am函数不是析构函数,它是一个终结器。它的任务与C++析构函数不同。一旦你在对象生命周期的终结器阶段,你就不能可靠地调用其他类包含的对象,因为它们可能在你的终结器被调用之前就已经被销毁了。zer正在以正确实现的dispose模式释放非托管资源或调用DisposeValse函数 如果需要析构函数,则需要实现IDisposable模式,以使代码以正确的方式运行 另请参阅,以获取有关编写好的IDisposable模式的更多提示,这也有助于解释为什么会出现错误。请参阅他开始谈论终结器的部分 回答您的评论:否。C没有在对象生命周期结束时可靠调用函数的方法自动IDisposable类+语句替换它。如果您的对象实现IDisposable,则调用方有责任处置该对象 在WPF应用程序的OnClose方法中,您需要调用类的Save功能。您根本不需要类是可识别的 <> >类名称函数不是析构函数,它是终结器。它的工作与C++析构函数不同。一旦你进入对象生命周期的终结器阶段,你就不能可靠地调用类中包含的其他对象,因为它们可能在调用终结器之前已经被销毁。终结器中的ng是释放非托管资源或以正确实现的dispose模式调用DisposeValse函数 如果需要析构函数,则需要实现IDisposable模式,以使代码以正确的方式运行 另请参阅,以获取有关编写好的IDisposable模式的更多提示,这也有助于解释为什么会出现错误。请参阅他开始谈论终结器的部分 回答您的评论:否。C没有在对象生命周期结束时可靠调用函数的方法自动IDisposable类+语句替换它。如果您的对象实现IDisposable,则调用方有责任处置该对象 在WPF应用程序的OnClose方法中,您需要调用类的Save功能。您根本不需要类是可识别的
是的,当你在析构函数中时,你不能保证你的任何CLR对象都是活动的。这不是我遇到的问题。依赖属性仍然是活动的,只是不喜欢从析构函数线程调用。我不能调用App.Dispatcher.Invoke,因为它在我之前被处理。是的,当你在在析构函数中,无法保证任何CLR对象都处于活动状态。这不是我遇到的问题。依赖项属性仍然处于活动状态,只是不喜欢从析构函数线程调用。我无法调用App.Dispatcher.Invoke,因为它在我之前被释放。在我之前是否会自动调用Dispose程序已关闭?我需要读取依赖项属性,以便在关闭WPF应用程序之前保存内容。是否在关闭程序之前自动调用Dispose?我需要读取依赖项属性,以便在关闭WPF应用程序之前保存内容。
//Inside the codebehind of your WPF form
public partial class MyWindow: Window
{
//(Snip)
protected override void OnClosed(EventArgs e) //You may need to use OnClosing insetad of OnClose, check the documentation to see which is more appropriate for you.
{
_DPDemoInstance.Save(); //Put the code that was in your ~DPDemo() function in this save function.
//You could also make the class disposeable and call "Dispose()" instead.
}
}