/// <summary>参照処理</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks> /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 /// (結果表示にだけ匿名デリゲードを使用するパターン) /// </remarks> protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) { // 非同期処理クラスを生成 AsyncFunc af = new AsyncFunc(this); // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "Select", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(this.textBox1.Text); // 引数を非同期処理クラスに設定 af.Parameter = testParameterValue; // 画面上のデータは退避する(オブジェクトであれば、クローンする。) af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; // 非同期実行するメソッドを指定 // ここは副スレッドから実行されるので注意。 af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); // 結果表示のメソッドを指定(匿名デリゲード) // このメソッドは必ず主スレッドで実行される。 af.SetResult = delegate(object retVal) { if (retVal is Exception) { // 例外発生時 MessageBox.Show(retVal.ToString(), "非同期処理で例外発生!"); } else { // 正常時 // 戻り値(キャスト) TestReturnValue testReturnValue = (TestReturnValue)retVal; // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.textBox1.Text = testReturnValue.ShipperID.ToString(); this.textBox2.Text = testReturnValue.CompanyName; this.textBox3.Text = testReturnValue.Phone; } } }; // 非同期実行する。 if (!af.Start()) { MessageBox.Show("別の非同期処理が実行中です。"); } }
/// <summary>参照処理</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks> /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 /// (結果表示にだけ匿名デリゲードを使用するパターン) /// </remarks> protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) { // 非同期処理クラスを生成 AsyncFunc af = new AsyncFunc(this); // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "Select", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(this.textBox1.Text); // 引数を非同期処理クラスに設定 af.Parameter = testParameterValue; // 画面上のデータは退避する(オブジェクトであれば、クローンする。) af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; // 非同期実行するメソッドを指定 // ここは副スレッドから実行されるので注意。 af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); // 結果表示のメソッドを指定(匿名デリゲード) // このメソッドは必ず主スレッドで実行される。 af.SetResult = delegate(object retVal) { if (retVal is Exception) { // 例外発生時 RcMyCmnFunction.ShowErrorMessageWin((Exception)retVal, "非同期処理で例外発生!"); } else { // 正常時 // 戻り値(キャスト) TestReturnValue testReturnValue = (TestReturnValue)retVal; // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.textBox1.Text = testReturnValue.ShipperID.ToString(); this.textBox2.Text = testReturnValue.CompanyName; this.textBox3.Text = testReturnValue.Phone; } } }; // 非同期実行する。 if (!af.Start()) { MessageBox.Show("別の非同期処理が実行中です。"); } }