Я хочу расширить элемент управления TextBox, чтобы он вызывал пользовательское событие с указанной задержкой.
Вот код, который у меня есть:
public class DelayTextBox : TextBox
{
private Timer _delayTimer;
private int _threshold = 1000;
public DelayTextBox()
{
_delayTimer = new Timer(_threshold);
_delayTimer.Elapsed += new ElapsedEventHandler(_delayTimer_Elapsed);
}
public int Delay
{
set { _threshold = value; }
}
private void _delayTimer_Elapsed(object sender, ElapsedEventArgs e)
{
_delayTimer.Stop();
RaiseDelayedTextChangedEvent();
}
protected override void OnTextChanged(TextChangedEventArgs e)
{
_delayTimer.Stop();
_delayTimer.Start();
}
private static readonly RoutedEvent DelayedTextChangedEvent = EventManager.RegisterRoutedEvent(
"DelayedTextChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DelayTextBox));
public event RoutedEventHandler DelayedTextChanged
{
add { AddHandler(DelayedTextChangedEvent, value); }
remove { RemoveHandler(DelayedTextChangedEvent, value); }
}
private void RaiseDelayedTextChangedEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(DelayTextBox.DelayedTextChangedEvent);
RaiseEvent(newEventArgs);
}
}
Проблема в том, что всякий раз, когда я запускаю RaiseDelayedTextChangedEvent (), я получаю исключение, сообщая мне
'Вызывающий поток не может получить доступ к этому объекту, потому что другой
это принадлежит нити. '
Здесь выдается исключение:
private void RaiseDelayedTextChangedEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(DelayTextBox.DelayedTextChangedEvent);
RaiseEvent(newEventArgs);
} <---- Here