-2

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自明です。

これを解決する方法はありますか?

4

2 に答える 2