Beispiel #1
0
        /// <summary>非同期実行</summary>
        private void UOC_btnASync_Click(RcFxEventArgs rcFxEventArgs)
        {
            int wait = (int)this.numericUpDown1.Value;

            MyBaseAsyncFunc af = new MyBaseAsyncFunc(this);
            //MyBaseAsyncFunc af = new MyBaseAsyncFunc(this.panel1);

            // 非同期処理本体・無名関数デレゲード
            af.AsyncFunc = delegate(object param)
            {
                // 進捗報告
                af.ExecChangeProgress(string.Format("スレッド実行中: {0}秒待つ", wait));

                System.Threading.Thread.Sleep(wait * 1000);

                return "終わり";
            };

            // 進捗報告・無名関数デレゲード
            af.ChangeProgress = delegate(object param)
            {
                string text = (string)param;
                this.AddStatus(text);
            };

            // 結果設定・無名関数デレゲード
            af.SetResult = delegate(object retVal)
            {
                if (retVal is Exception)
                {
                    // 例外発生時
                    Exception ex = (Exception)retVal;
                    this.AddStatus(string.Format("スレッド実行終了: エラー発生:{0}", ex.Message));
                }
                else
                {
                    this.AddStatus("スレッド実行終了");
                    //throw new Exception("SetResultでエラーとなった場合。");
                }

                // 結果表示のテスト
                this.TestOfResultDisplay();

                // フォーカス制御をする場合、
                this.BeginInvoke(new MethodInvoker(this.SetForcus));

            };

            // 非同期処理を開始させる。
            if (af.Start())
            {
                this.AddStatus(string.Format(
                    "キューイングされました、現在のスレッド数:{0}",
                    BaseAsyncFunc.ThreadCount.ToString()));
            }
            else
            {
                this.AddStatus(string.Format(
                    "非同期スレッドが最大数に達しています。:{0}",
                    BaseAsyncFunc.ThreadCount.ToString()));
            }
        }
Beispiel #2
0
        /// <summary>フォームロードのUOCメソッド</summary>
        protected override void UOC_FormInit()
        {
            int wait = 1;
            int max = 5;

            MyBaseAsyncFunc af = new MyBaseAsyncFunc(this);

            // 非同期処理本体
            af.AsyncFunc = delegate(object param)
            {
                for (this.Current = 1; this.Current <= max; this.Current++)
                {
                    // ダミー
                    System.Threading.Thread.Sleep(wait * 1000);

                    // 進捗表示
                    af.ExecChangeProgress(string.Format(
                        "処理中です・・・:{0}/{1}", this.Current.ToString(), max.ToString()));
                }

                return "処理が完了しました。";
            };

            // 進捗報告・無名関数デレゲード
            af.ChangeProgress = delegate(object param)
            {
                this.label1.Text = (string)param;
            };

            // 結果設定・無名関数デレゲード
            af.SetResult = delegate(object retVal)
            {
                if (retVal is Exception)
                {
                    // 例外発生時
                    this.label1.Text = (retVal as Exception).ToString();
                }
                else
                {
                    this.label1.Text = (string)retVal;
                    this.btnStart.Visible = true;
                }
            };

            if (af.Start())
            {
                //正常に実行
                this.label1.Text = string.Format(
                    "処理中です・・・:{0}/{1}", this.Current.ToString(), max.ToString());
            }
            else
            {
                // ここは通らないが念のため
                this.label1.Text = string.Format(
                    "非同期スレッドが最大数に達しています。:{0}", BaseAsyncFunc.ThreadCount.ToString());
            }
        }
Beispiel #3
0
        /// <summary>隠しボタンのイベント実装</summary>
        protected void UOC_btnHdnBtn1_Click(RcFxEventArgs rcFxEventArgs)
        {
            MessageBox.Show("UOC_btnHdnBtn1_Click");

            if (cbxDoClick2.Checked && txtStatus.Text.Length < 500)
            {
                //// 反転
                //cbxDoClick2.Checked = !cbxDoClick2.Checked;

                int wait = (int)this.numericUpDown1.Value;

                //MyBaseAsyncFunc af = new MyBaseAsyncFunc(this);
                MyBaseAsyncFunc af = new MyBaseAsyncFunc(this.panel1);

                // 非同期処理本体・無名関数デレゲード
                af.AsyncFunc = delegate(object param)
                {
                    // 進捗報告
                    af.ExecChangeProgress(string.Format("スレッド実行中: {0}秒待つ", wait));

                    System.Threading.Thread.Sleep(wait * 1000);

                    return "終わり";
                };

                // 進捗報告・無名関数デレゲード
                af.ChangeProgress = delegate(object param)
                {
                    string text = (string)param;
                    this.AddStatus(text);
                };

                // 結果設定・無名関数デレゲード
                af.SetResult = delegate(object retVal)
                {
                    if (retVal is Exception)
                    {
                        // 例外発生時
                        Exception ex = (Exception)retVal;
                        this.AddStatus(string.Format("スレッド実行終了: エラー発生:{0}", ex.Message));
                    }
                    else
                    {
                        this.AddStatus("スレッド実行終了");
                    }

                    // 結果表示のテスト
                    this.TestOfResultDisplay();
                };

                // 非同期処理を開始させる。
                if (af.Start())
                {
                    this.AddStatus(string.Format(
                        "キューイングされました、現在のスレッド数:{0}",
                        BaseAsyncFunc.ThreadCount.ToString()));
                }
                else
                {
                    this.AddStatus(string.Format(
                        "非同期スレッドが最大数に達しています。:{0}",
                        BaseAsyncFunc.ThreadCount.ToString()));
                }
            }
        }