0

イメージボードをスキャンして画像をダウンロードするアプリケーションの作成に取り組んでいます。もちろん、複数のボードを一度に削ることができるため、これはスレッド化する必要があります。基本的な機能はすでにできていますが、今は壁にぶつかっています。

現在、URLを指定してスレッドを開始し、ボタンを押すと、このボタンはクラスを指すスレッドを開始します。

そこでタイマーを使用しているため、私の問題はこのクラス内にあります。

現在、データは一度にログにプッシュされますが、設定されたとおりにデータをプッシュする必要があります。

現在、これは私のタイマーのティックイベントにバインドされている私の関数です:

    public void scanForImages(object s, ElapsedEventArgs e)
    {

        if (status != 1 && status != 4)
        {
            status = 1;
            int i = 0;
            while (status == 1)
            {
                main.updateLog(th.Name + ": Blaat\n");
                i++;
                if (i > 50)
                {
                    status = 4;
                    t.Stop();
                    main.updateThreads("Aborting: " + th.Name, th);

                    th.Abort();
                }
            }
        }
        else
        {
            t.Stop();
        }
    }

テキストボックスに出力を返していますが、すべてを一度にプッシュしています(すべてのth.Name + ": Blaat\n"

updateLog: public void updateLog(string txt) {

        if (InvokeRequired) 
        { 
            Action action = () => textBox2.AppendText(txt); 
            textBox2.Invoke(action); 
        } 
        else 
        { 
            textBox2.AppendText(txt); 
        } 

    }

私は何を間違っていますか?(必要に応じて、より多くのコードを提供できます)

4

1 に答える 1

0

あなたは.updatelogコードを与えないので、私たちは正しく答えることができます...その関数内のファイルをフラッシュするか、ディスパッチャーを開始する必要があります

Dispatcher.Invoke(DispatcherPriority.Normal,
                      new Action<string>(main.updateLog),
                      th.Name + ": Blaat\n");  
于 2013-03-31T08:32:51.617 に答える