private async void buttonSearch_Click(object sender, EventArgs e) { result.Clear(); textBox1.Text = ""; buttonRead.Enabled = false; buttonSearch.Enabled = false; buttonNarrowDown.Enabled = false; SetProgressBar(0); try { maxDepth = Convert.ToInt32(textBoxDepth.Text); maxOffsetNum = Convert.ToInt32(textBoxOffsetNum.Text); maxOffsetAddress = Convert.ToInt32(textBoxOffsetAddress.Text, 16); long heapStart = Convert.ToInt64(dataGridView1.Rows[0].Cells[3].Value.ToString(), 16); long targetAddress = Convert.ToInt64(dataGridView1.Rows[0].Cells[5].Value.ToString(), 16); Address address = new Address(MemoryType.HEAP, targetAddress - heapStart); if (maxOffsetNum <= 0) { MessageBox.Show("Offset Num must be greater than 0", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (maxOffsetAddress < 0) { MessageBox.Show("Offset Range must be greater or equal to 0", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { buttonCancel.Enabled = true; cancel = new CancellationTokenSource(); Progress <double> prog = new Progress <double>(AddProgressBar); FindPath find = new FindPath(maxOffsetNum, maxOffsetAddress); await Task.Run(() => { find.Search(cancel.Token, prog, 100.0, info, maxDepth, new List <IReverseOrderPath>(), address, result); }); SetProgressBar(100); PrintPath(); System.Media.SystemSounds.Asterisk.Play(); buttonNarrowDown.Enabled = true; } } catch (System.OperationCanceledException) { SetProgressBar(0); System.Media.SystemSounds.Asterisk.Play(); } catch (Exception ex) { SetProgressBar(0); MessageBox.Show("Read Failed" + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { buttonCancel.Enabled = false; cancel.Dispose(); } buttonRead.Enabled = true; buttonSearch.Enabled = true; }
private async void buttonNarrowDown_Click(object sender, EventArgs e) { try { SetProgressBar(0); Dictionary <IDumpDataReader, long> dumps = new Dictionary <IDumpDataReader, long>(); for (int i = 1; i < dataGridView1.Rows.Count; i++) { DataGridViewRow row = dataGridView1.Rows[i]; ClearRowBackColor(row); if (IsBlankRow(row)) { continue; } IDumpDataReader reader = CreateDumpDataReader(row, true); if (reader != null) { long target = Convert.ToInt64(row.Cells[5].Value.ToString(), 16); dumps.Add(reader, target); } } if (dumps.Count == 0) { throw new Exception("Fill out 2nd line to narrow down"); } buttonRead.Enabled = false; buttonSearch.Enabled = false; buttonNarrowDown.Enabled = false; buttonCancel.Enabled = true; cancel = new CancellationTokenSource(); Progress <int> prog = new Progress <int>(SetProgressBar); List <List <IReverseOrderPath> > copyList = new List <List <IReverseOrderPath> >(result); result = await Task.Run(() => FindPath.NarrowDown(cancel.Token, prog, result, dumps)); SetProgressBar(100); System.Media.SystemSounds.Asterisk.Play(); } catch (System.OperationCanceledException) { SetProgressBar(0); System.Media.SystemSounds.Asterisk.Play(); } catch (Exception ex) { SetProgressBar(0); MessageBox.Show(Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { if (cancel != null) { cancel.Dispose(); } PrintPath(); buttonRead.Enabled = true; buttonSearch.Enabled = true; buttonNarrowDown.Enabled = true; buttonCancel.Enabled = false; } }