带回调的线程示例不起作用

本文关键字:不起作用 线程 回调 | 更新日期: 2023-09-27 18:24:41

我正在处理这个例子,但我无法对回调和线程进行网格化。我想要的是这个
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;
    }

带回调的线程示例不起作用

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

一般来说,您不应该"新建"线程实例。最好使用线程池、后台工作程序,或者如果您在.net 4上,则使用线程并行库中的任务对象。