none
如何讓視窗用執行緒同時作用? RRS feed

  • 問題

  • 看了一些執行緒的使用與範例了解如何使用,但套在視窗上就頻頻出錯
    我有一類別中有方法能呼叫另一個彈跳視窗,如何讓他們同實作用?
    我想讓他啟動主視窗後 另一彈跳的視窗是固定一段時間會彈跳
    有哪裡寫錯還是觀念錯嗎?可能我看MSDN有些沒看得很懂意思...
    麻煩會的大大教一下~感謝

    namespace WindowsFormsApplication1
    {
        public static class Program
        {
            
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);  
               
                Application.Run(new Form1());   <- 這行移到for後會變成執行緒那沒做完就不能啟動~放這又變成不關掉就沒執行緒  

                for (int i = 0; i < 3; i++) 
                {
                    Thread newthread = new Thread(new ThreadStart(Clear_Data.CallWarning)); <- 如果要把視窗那寫成執行緒,用這樣ThreadStart內要怎麼放Form1?
                    newthread.Start();
                    Thread.Sleep(5000);
                }
            }        
        }
       
        public partial class Form1 : Form
        {       
            public Form1()
            {
                InitializeComponent();
               

            }
            private void button1_Click(object sender, EventArgs e)
            {
                ........
                //////此視窗的一些動作
                
            }
        }
    }

    2009年7月18日 上午 05:25

解答

  • static class Program
        {
            /// <summary>
            /// 應用程式的主要進入點。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
               
                 for (int i = 0; i < 3; i++)
                {
                    Thread newthread = new Thread(new ThreadStart(test));
                    newthread.Start();
                 // Thread.Sleep(5000);
                }

                          
            }
            static void test()
            {
                Application.Run(new Form1());
            }
        }
    我這樣寫它會開三個窗出來啊? 你出錯的地方是什麼 ?
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年7月18日 上午 05:56
    版主

所有回覆

  • static class Program
        {
            /// <summary>
            /// 應用程式的主要進入點。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
               
                 for (int i = 0; i < 3; i++)
                {
                    Thread newthread = new Thread(new ThreadStart(test));
                    newthread.Start();
                 // Thread.Sleep(5000);
                }

                          
            }
            static void test()
            {
                Application.Run(new Form1());
            }
        }
    我這樣寫它會開三個窗出來啊? 你出錯的地方是什麼 ?
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年7月18日 上午 05:56
    版主
  • 原來只要把Application.Run(new Form1());改成您寫這樣就好了呀!!

    本來的問題是:

    因為ThreadStart()內要放東西,但是我上面寫的那樣變成我不知道要放哪一個~"~

    那個Clear_Data.CallWarning是其他地方呼叫的所以會顯示3個沒錯

    但是我自己本身的Form1 不知道怎麼讓她顯示 

    放在迴圈前變成主視窗不關掉,呼叫Clear_Data.CallWarning就沒辦法顯示

    放在迴圈後變成呼叫的Clear_Data.CallWarning不關掉,主視窗就沒辦法顯示


    想再問一個問題,我用目前的主視窗用執行緒的方式呼叫別的方法執行

    我的主視窗關掉終止執行,我必須告知被呼叫的程式停止嗎?

    還是它會因主程式關閉而停止?(如果呼叫的是會依值循環執行的)
    2009年7月18日 上午 08:18
  • 你可以把Thread 執行個體的 IsBackground 屬性設為True , 不然就得用Abort方法停止執行緒.
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年7月18日 下午 12:20
    版主