使用回调示例进行线程不起作用。

时间:2012-02-15 23:09:12

标签: c# multithreading callback

我正在研究这个例子,但我无法对回调和线程进行网格划分。 我想要的是这个  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 个答案:

答案 0 :(得分:4)

看一下backgroundworker课程,它更适合你想要做的事情,而且更容易掌握!

通常,您不应该'新建'Thread实例。最好使用thread pool,一个后台工作者,或者如果你在.net 4上,那么来自线程并行库的task对象。