Timer
メソッド内に a の間隔で a を設定している1000
ため、毎秒別の対応する文字が aに入力されTextbox
ます (ほとんど自動化された入力)。確認する_currentTextLength == _text.Length
と、「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」というスレッド エラーが表示されます。
public void WriteText(string Text)
{
timer = new Timer();
try
{
_text = Text;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed_WriteText);
timer.Interval = 1000;
timer.Enabled = true;
timer.Start();
}
catch
{
MessageBox.Show("WriteText timer could not be started.");
}
}
// Write Text Timer Event
void timer_Elapsed_WriteText(object sender, ElapsedEventArgs e)
{
TextBoxAutomationPeer peer = new TextBoxAutomationPeer(_textBox);
IValueProvider valueProvider = peer.GetPattern(PatternInterface.Value) as IValueProvider;
valueProvider.SetValue(_text.Substring(0, _currentTextLength));
if (_currentTextLength == _text.Length) // Error here
{
timer.Stop();
timer = null;
return;
}
_currentTextLength++;
}
変数_text
はプライベート クラス変数であり、そうです_currentTextLength
。_textBox
自明です。
これを解決する方法はありますか?