Если это может помочь, у меня была точно такая же проблема (как указано здесь и
здесь ). Я привожу здесь одну из возможных причин этого.
Я использую ElementHost (c #, .net4.0, winform, VS2012) для отличного WPF UserControl. Все работало Отлично . В своем коде UserControl я использовал класс, который был написан из другой библиотеки DLL и использовался для хранения последовательности выполнения определенной задачи. Например (это близко к реальности):
public class SI_MyProgressionHelper
{
public string gstr_OverallProgress_Description { get; set; }
public int gint_OverallProgress_ActualValue { get; set; }
public int gint_OverallProgress_MaximumValue { get; set; }
}
Затем я хотел «подключить» этот класс к моему WPF progressBar / textBox, чтобы сообщить о прогрессе. Однако (и это еще один разговор), WPF необходимо применить INotifyPropertyChanged к каждому отдельному свойству, которое вы хотите подключить к WPF (для автоматического обновления элементов управления в WPF). Это одна из самых уродливых вещей, которые я когда-либо видел, но это то, что есть (и я знаю, что должен что-то пропустить ..)
В любом случае, чтобы соответствовать WPF Механизм связывания между моим ProgressBar / textbox и моим классом SI_MyProgressionHelper, я изменил класс (который, повторяю, находится в другой DLL) так:
public class SI_MyProgressionHelper : INotifyPropertyChanged
{
private string _gstr_OverallProgress_Description = "";
public string gstr_OverallProgress_Description { get { return _gstr_OverallProgress_Description; } set { _gstr_OverallProgress_Description = value; RaisePropertyChanged("gstr_OverallProgress_Description"); } }
private int _gint_OverallProgress_ActualValue = 0;
public int gint_OverallProgress_ActualValue { get { return _gint_OverallProgress_ActualValue; } set { _gint_OverallProgress_ActualValue = value; RaisePropertyChanged("gint_OverallProgress_ActualValue"); } }
private int _gint_OverallProgress_MaximumValue = 9999;
public int gint_OverallProgress_MaximumValue { get { return _gint_OverallProgress_MaximumValue; } set { _gint_OverallProgress_MaximumValue = value; RaisePropertyChanged("gint_OverallProgress_MaximumValue"); } }
protected virtual void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
БАМ! Ошибка возникает в любом случайном целочисленном свойстве любого элемента XMLElement (высоты, ширины и т. Д.) Моего UserContrl (в точности так, как указано здесь и в другой ссылке, указанной выше).
Применение приведенного здесь решения исправляет мою проблему:
В моем методе Program.cs Main ():
[DllImport( "msvcr70.dll", CallingConvention = CallingConvention.Cdecl )]
public static extern int _fpreset();
, а затем, в моем UserControl.xaml.cs, в конструкторе:
public UserControl1()
{
Program._fpreset();
InitializeComponent();
}
Кроме того, и именно поэтому я написал этот комментарий : удалив INotifyPropertyChanged для моего класса Helper (и других связанных с этим вещей), проблема исчезнет . (но мой WPF грустный, потому что мой код слишком короткий для него).
Надеюсь, что эта дополнительная информация может помочь кому-то, имеющему ту же проблему.
Кроме того, для всех моих французских коллег, вот французская ошибка:
В любом случае, если вы хотите продвинуться вперед
Домашняя арифметика.