/// <summary> /// 计算结果返回事件 /// </summary> /// <param name="status">状态</param> /// <param name="message">信息</param> /// <param name="percent">百分比</param> /// <param name="value">具体数据数组</param> private void ResCalcReturn_Event(EnumResCalcStatus status, string message, double percent, double[] value) { if (status == EnumResCalcStatus.Done) { this.Invoke(new EventHandler(delegate { int len = value.Length; string log = string.Format("{0}个电阻并联最佳方案:{1}", len, ResValueFormat(value[0])); for (int i = 1; i < len; i++) { log += @" // " + ResValueFormat(value[i]); } log += string.Format(" = {0:#.###}", ResValueFormat(ResCalc.CalcParallel(value))); txtOutput.AppendText(log + "\r\n"); if (percent >= 100) { txtOutput.AppendText(message); } })); } else if (status == EnumResCalcStatus.Error) { this.Invoke(new EventHandler(delegate { txtOutput.AppendText(message); })); } this.Invoke(new EventHandler(delegate { progressBarResCalc.Value = Convert.ToInt32(percent) % (progressBarResCalc.Maximum + 1); })); }
/// <summary> /// 计算按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCalc_Click(object sender, EventArgs e) { double resValue = GetSiteResValue(txtResValue, comboBoxResUnit); if (resValue > 0) { txtOutput.Clear(); GetResSelectList(listViewRes, ResListData, resValue); ResCalc resCalc = new ResCalc(ResListData.ToArray(), resValue, Convert.ToInt32(numResCount.Value)); resCalc.EventResCalcReturn += new ResCalc.DelegateResCalcReturn(ResCalcReturn_Event); resCalc.Start(); } else { MessageBox.Show("输入的阻值有误,请重新输入!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); txtResValue.Focus(); } }