亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

第二種形式無法正確加載

第二種形式無法正確加載

C#
陪伴而非守候 2021-11-21 14:56:15
我正在嘗試創建一個鬧鐘,我想要第二個表單來顯示鬧鐘何時開始。問題是它部分加載,當我將鼠標懸停在它上面時,我得到了加載光標。起初我認為我應該等待,但沒有任何改變。應該是這樣:這是調用第二種形式的函數:private void ring() {    if (System.DateTime.Now.ToString("HH:mm") == temp && songisplaying == false)     {        soundplayer.PlayLooping();        songisplaying = true;        if (WindowState == FormWindowState.Minimized)        {            this.Show();            WindowState = FormWindowState.Normal;        }        wakeupForm win = new wakeupForm();        win.Show();    }這是第二種形式的代碼public partial class wakeupForm : Form{    public wakeupForm()    {        InitializeComponent();    }    private void button1_Click(object sender, EventArgs e)    {    }}這是調用ring函數的代碼:public Form1(){    InitializeComponent();    num1.Maximum = 2;    num3.Maximum = 5;    num4.Maximum = 9;    var timer2 = new System.Threading.Timer(e => ring(),null,TimeSpan.Zero,TimeSpan.FromSeconds(10));    ofd.Filter = "WAV | *.wav";}
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

System.Threading.Timerring()在線程池中的一個線程上運行。ring()反過來嘗試實例化一個應該始終在主線程上完成的窗體(對 windows 窗體的所有訪問都應該從主線程完成)。


請改用以下內容:


private void ring() 

{

    if (System.DateTime.Now.ToString("HH:mm") == temp && songisplaying == false) 

    {

        songisplaying = true;

        if (this.InvokeRequired) 

            this.Invoke(new MethodInvoker(()=>{ringOnMainThread()}));

        else

            ringOnMainThread();

    }

}


private void ringOnMainThread()

{

    soundplayer.PlayLooping();

    timer1.Start();


    if (WindowState == FormWindowState.Minimized)

    {

        this.Show();

        WindowState = FormWindowState.Normal;

    }


    wakeupForm win = new wakeupForm();

    win.Show();

}

請注意,我已songisplaying = true;采取行動以避免競爭條件。


查看完整回答
反對 回復 2021-11-21
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

我相信您應該在顯示表單時停止計時器。


(檢查你的計時器間隔。如果它在一分鐘內滴答不止一次,它會多次擊中你的 ring() 方法)。


您應該在 ring() 方法中停止您的計時器,并在您的 wakeupForm 的 FormClosing 上重新啟動。


    private void ring() {


    if (System.DateTime.Now.ToString("HH:mm") == temp && songisplaying == false) {

        soundplayer.PlayLooping();




        timer1.Stop();//Stop your timer.




        songisplaying = true;


        if (WindowState == FormWindowState.Minimized)

        {

            this.Show();

            WindowState = FormWindowState.Normal;

        }


        wakeupForm win = new wakeupForm();

        win.Form_Closed += win_Closed;

        win.Show();


    }


     private void wnd_Closed(object sender, EventArgs e)

     {

        timer1.Start();

     }


查看完整回答
反對 回復 2021-11-21
  • 2 回答
  • 0 關注
  • 189 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號