我不知道如何解釋它..所以我決定給圖像,這將清除場景。 我想更新我的UserControl中的標籤以獲取從主應用程序啓動的其他線程的更新。我學的依賴對象幫助這個Singleton模式很多,但困惑如何把它做花費都在一週:(。任何應用程序級別的線程更新進度WPF
一段時間STA線程問題來得有些時間從其他線程調用錯誤發生。
我不知道如何解釋它..所以我決定給圖像,這將清除場景。 我想更新我的UserControl中的標籤以獲取從主應用程序啓動的其他線程的更新。我學的依賴對象幫助這個Singleton模式很多,但困惑如何把它做花費都在一週:(。任何應用程序級別的線程更新進度WPF
一段時間STA線程問題來得有些時間從其他線程調用錯誤發生。
而不是使一個靜態類TaskProgress
從DependencyObject
繼承的,應實現它INotiifyPropertyChanged
和從屬性Instance
的二傳手提高PropertyChanged
事件。
這將做的原因有兩個訣竅...
DependencyObject
是線程無關,因此通過一些其他的線程,必然導致錯誤的訪問。
INotifyPropertyChanged.PropertyChanged
事件由WPF的綁定框架內部委託給UI調度程序。所以簡單的myTaskProgress.Instance = value
會自動更新用戶界面,不管它是從哪個線程完成的。
請注意,INotifyPropertyChanged
是一個接口,它不能在靜態類上實現,並且不能具有靜態事件或靜態屬性。您將需要將TaskProgress
(如上面的myTaskProgress
)的某個實例綁定到Label
。
讓我知道這是否有幫助。
在線程,
您可以嘗試使用此代碼:
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() =>
{
// your code to update UI here.
}
));
我認爲正確的代碼應該是:
public string lblProgressBarProducts
{
get { return (string)GetValue(lblProgressBarProductsProperty); }
set { SetValue(lblProgressBarProductsProperty, value); }
}
// Using a DependencyProperty as the backing store for lblProgressBarProducts. This enables animation, styling, binding, etc...
public static readonly DependencyProperty lblProgressBarProductsProperty =
DependencyProperty.Register("lblProgressBarProducts", typeof(string), typeof(TaskProgress), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
在哪裏可以使用此代碼?以及如何綁定內容標籤..我想我也綁定了錯誤 –
如果你很快,你可以從scrapAll函數更新標籤。第一時間不使用TaskProgress。 – Tony