主程序和线程之间的无限循环
本文关键字:无限循环 之间 线程 主程序 | 更新日期: 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
派生,这当然不是一个。你需要重新考虑你的设计