私はちょっと離れているかもしれませんし、そうでなければ本当に近いです。いずれにせよ、私は現在SOLです。:)
拡張メソッドを使用してクラスのプロパティを設定できるようにしたいのですが、そのクラスは非 UI スレッドで更新される可能性があり (または更新されない可能性があります)、UI スレッドで更新を強制するクラスから派生します (これは INotifyPropertyChanged などを実装します)。
次のようなクラスを定義しています。
public class ClassToUpdate : UIObservableItem
{
private readonly Dispatcher mDispatcher = Dispatcher.CurrentDispatcher;
private Boolean mPropertyToUpdate = false;
public ClassToUpdate() : base()
{
}
public Dispatcher Dispatcher
{
get { return mDispatcher; }
}
public Boolean PropertyToUpdate
{
get { return mPropertyToUpdate; }
set { SetValue("PropertyToUpdate", ref mPropertyToUpdate, value; }
}
}
次のように定義された拡張メソッド クラスがあります。
static class ExtensionMethods
{
public static IEnumerable<T> SetMyProperty<T>(this IEnumerable<T> sourceList,
Boolean newValue)
{
ClassToUpdate firstClass = sourceList.FirstOrDefault() as ClassToUpdate;
if (firstClass.Dispatcher.Thread.ManagedThreadId !=
System.Threading.Thread.CurrentThread.ManagedThreadId)
{
// WHAT GOES HERE?
}
else
{
foreach (var classToUpdate in sourceList)
{
(classToUpdate as ClassToUpdate ).PropertyToUpdate = newValue;
yield return classToUpdate;
}
}
}
}
明らかに、拡張メソッドで「WHAT GOES HERE」を探しています。
ありがとう、wTs