private void ForwardCalculateThread_CalculateSeismicProfile(object obj) { Invoke(new EventHandler(() => { DigitalModelProgressBar.Visible = true; DigitalModelProgressBar.Style = ProgressBarStyle.Marquee; progressTip.Visible = true; progressTip.Text = "正在计算..."; })); double Nz = zedGraphControl.GraphPane.YAxis.Scale.Max - zedGraphControl.GraphPane.YAxis.Scale.Min; double Nx = zedGraphControl.GraphPane.XAxis.Scale.Max - zedGraphControl.GraphPane.XAxis.Scale.Min; SeismicProfileForm.DataChangeEventArgs args = obj as SeismicProfileForm.DataChangeEventArgs; float[,] record = new float[(int)Nx, args.Time]; float[,] arr = Gv; SeismicProfile algorithm = new SeismicProfile(args.Time, (int)Nx, (int)Nz, arr, zedGraphControl.GraphPane.CurveList); algorithm.Calculate(); record = algorithm.Record; Invoke(new EventHandler(() => { DigitalModelProgressBar.Visible = false; progressTip.Visible = false; DigitalModelProgressBar.Style = ProgressBarStyle.Blocks; if (record != null) { OpenChartForm_CalculateSeismicProfile(record); } })); }
private void TriButton_CalculateSeismicProfile(object obj) { Invoke(new EventHandler(() => { DigitalModelProgressBar.Visible = true; DigitalModelProgressBar.Style = ProgressBarStyle.Marquee; progressTip.Visible = true; progressTip.Text = "正在计算..."; })); double Nz = zedGraphControl.GraphPane.YAxis.Scale.Max - zedGraphControl.GraphPane.YAxis.Scale.Min; double Nx = zedGraphControl.GraphPane.XAxis.Scale.Max - zedGraphControl.GraphPane.XAxis.Scale.Min; SeismicProfileForm.DataChangeEventArgs args = obj as SeismicProfileForm.DataChangeEventArgs; float[,] record = new float[(int)Nx, args.Time]; unsafe { float[,] arr = Gv; int row = arr.GetUpperBound(0) + 1; int col = arr.GetUpperBound(1) + 1; fixed(float *fp = arr) { float *[] farr = new float *[row]; for (int i = 0; i < row; i++) { farr[i] = fp + i * col; } fixed(float **v = farr) { Algorithm algorithm = new Algorithm(args.Time, (int)Nx, (int)Nz, v); algorithm.Calculate(); for (int i = 0; i < args.Time; i++) { for (int j = 0; j < Nx; j++) { record[j, i] = algorithm.Record[j][i]; } } } } } Invoke(new EventHandler(() => { DigitalModelProgressBar.Visible = false; progressTip.Visible = false; DigitalModelProgressBar.Style = ProgressBarStyle.Blocks; if (record != null) { TriButtonCalculateSeismicProfile(record); } })); }
private void TriButton_CalculateSeismicProfile(object sender, SeismicProfileForm.DataChangeEventArgs args) { Thread thread = new Thread(TriButton_CalculateSeismicProfile) { IsBackground = true }; thread.SetApartmentState(ApartmentState.STA); thread.Start(args); SeismicProfileForm forwardCalculationForm = (SeismicProfileForm)sender; forwardCalculationForm.Close(); }