-2

私の場合:ループとスレッドは並行して動作しています。スレッドがその機能を使い果たすまでループの実行を停止したいのですが、スレッドの状態が停止したときに、ループをさらに実行したいと思います。

            for (int pp = 0; pp < LstIop.Count; pp++)
            {
                oCntrlImageDisplay = new CntrlImageDisplay();
                oCntrlImageEdit = new CntrlImageEdit();
                axAcroPDF1 = new AxAcroPDFLib.AxAcroPDF();
                int pages = ConvertFileIntoBinary(LstIop[pp].Input, oCntrlImageEdit);
                oCntrlImageDisplay.ImgDisplay.Image = LstIop[pp].Output;
                oCntrlImageDisplay.ImgEditor.Image = oCntrlImageDisplay.ImgDisplay.Image;


                if (t1 == null || t1.ThreadState.ToString() == "Stopped")
                {
                    t1 = new Thread(() => convert(pages, LstIop[pp].Input, LstIop[pp].Output, stIop[pp].Temp));
                    t1.SetApartmentState(ApartmentState.STA);
                    t1.IsBackground = true;
                    CheckForIllegalCrossThreadCalls = false;
                    t1.Start();

                }
            }
4

2 に答える 2

-1

他の人が言っているように、ここでスレッド化する意味はありませんが、あなたの地獄がそれに曲がっている場合は、非同期を実行してください。.Invokeまたは.begininvokeの後に.endInvokeを使用するだけです

元:

    delegate void T2();

    static void Main(string[] args)
    {
        T2 Thread = new T2(Work);

        while (true)
        {
            IAsyncResult result = Thread.BeginInvoke(null, null);

            //OTHER WORK TO DO

            Thread.EndInvoke(result);
        }
    }

    static void Work()
    {
       //WORK TO DO
    }

デリゲートを使用すると、戻りデータを指定したり、パラメーターを送信したりできるので便利です。

    delegate double T2(byte[] array,string text, int num);

    static void Main(string[] args)
    {
        T2 Thread = new T2(Work);

        while (true)
        {
            IAsyncResult result = Thread.BeginInvoke(null, null);

            //OTHER WORK TO DO

            double Returned = Thread.EndInvoke(result);
        }
    }

    static double Work(byte[] array, string text, int num)
    {
        // WORK TO DO
        return(3.4);
    }
于 2012-09-24T16:04:27.223 に答える
-2

スレッドの実行が終了するのを待つには、次を呼び出します。

t1.join();
于 2012-09-24T15:47:38.230 に答える