主程序和线程之间的无限循环

本文关键字:无限循环 之间 线程 主程序 | 更新日期: 2023-09-27 18:03:47

namespace MP3_speler.Threading
{
public class thread : MainWindow
{
    public thread() 
    {
        StartThreading();          
    }
    public void StartThreading() 
    {
        Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
        thread.Priority = ThreadPriority.BelowNormal;
        thread.Start();            
    }
    public void WorkThreadFunction()
    {
        try
        {
            UpdateMyDelegatedelegate UpdateMyDelegate = new UpdateMyDelegatedelegate(UpdateMyDelegateLabel);
            timelabel.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, UpdateMyDelegate, (Convert.ToInt32(mp3FileReader.Position / 10000)));
            Thread.Sleep(500);
        }
        catch 
        {
        }
    }
    private void UpdateMyDelegateLabel(int i)
    {
        double timeseconds = (double)mp3FileReader.Position / (double)176000;
        TimeSpan t = TimeSpan.FromSeconds(timeseconds);
        string answer = string.Format("{0:D2}:{1:D2}:{2:D2}",
                        t.Hours,
                        t.Minutes,
                        t.Seconds
                        );
        timelabel.Content = answer;

        if (waveOut.PlaybackState != PlaybackState.Paused) Slider2.Value = mp3FileReader.Position;
    }
}
}

代码Mainprogram:

 public partial class MainWindow : Window
  {
    public IWavePlayer waveOut;
    public Mp3FileReader mp3FileReader;
    public delegate void UpdateMyDelegatedelegate(int i);
    public MainWindow()
    {
        InitializeComponent();
        //Create a thread
        thread thread = new thread();
        //Setting up notifyicon
        notifyCenter notify = new notifyCenter(this);
        //giving values to bars
        Slider1.Value = 5;
        volumelabel.Content = 50;
    }

这段代码生成了一个无限循环,并一直返回到Initializecomponent。也许问题是,我使线程类继承主窗口,但想知道问题是什么。

主程序和线程之间的无限循环

是的,thread衍生自MainWindow的事实导致了无限循环。

MainWindow的构造函数中,创建了一个新的thread对象。但是,由于thread派生自MainWindow,因此它随后会重新调用MainWindow的构造函数,当创建thread时,将无限重复。

请记住,在派生时,构造函数将始终调用基类的默认构造函数,除非您显式指示使用不同的构造函数。

作为题外话,没有任何用例我能想到永远从MainWindow派生,这当然不是一个。你需要重新考虑你的设计