Потоки с примером обратного вызова не работает. - PullRequest
2 голосов
/ 16 февраля 2012

Я работаю над этим примером, но я не могу связать обратный вызов и потоки.Я хочу вот что.
1) Нажмите кнопку 2) Запустите запущенный индикатор выполнения. 3) Вызовите новый поток, чтобы выполнить какой-либо длительный процесс. 4) Обратный вызов длительного процесса должен запустить индикатор выполнения.

Ниже у меня есть кое-что ... Хотя параметр обратного вызова для DoSomethingInThread имеет значение null.StopProgressBar () действует на элемент управления ProgressBar, поэтому он не может быть статическим.

    static bool done;
    static readonly object locker = new object();
    static ParameterizedThreadStart threadStarter = new ParameterizedThreadStart(DoSomethingInThread);  
    private Thread workerThread = new Thread(threadStarter);
    public delegate void StopProgressBarCallback()

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        StartProgressBar();
        workerThread.Start();
    }

    static void DoSomethingInThread(object callback)
    {
        StopProgressBarCallback stopper = callback as StopProgressBarCallback;
        lock (locker)
        {
            Thread.Sleep(5 * 1000);
        }
        stopper();
    }

    private void StartProgressBar()
    {
        progressBar1.MarqueeAnimationSpeed = 30;
        progressBar1.Style = ProgressBarStyle.Marquee;
    }

    public void StopProgressBar()
    {
        progressBar1.Style = ProgressBarStyle.Continuous;
    }

1 Ответ

4 голосов
/ 16 февраля 2012

Взгляните на класс backgroundworker , он больше подходит для того, что вы пытаетесь сделать, и намного легче справиться с!

Как правило, вы никогда не должны «обновлять» экземпляры Thread. Лучше использовать пул потоков , фоновый рабочий или, если вы используете .net 4, объект task из параллельной библиотеки потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...