private void CreateThread(TaskData task) { while (true) { task.WaitHandle.Wait(); if (task.ThreadRunning == false) { break; } if (task.Sql.Trim() == "") { task.WaitHandle.Reset(); continue; } var sw = new Stopwatch(); sw.Start(); try { task.Executing = true; task.IsGridLoaded = task.IsTextLoaded = task.IsParametersLoaded = false; _synchronizationContext.Post(new SendOrPostCallback(o => { this.LoadResult(task); }), task); task.Parameters = new BsonDocument(); var sql = new StringReader(task.Sql.Trim()); while (sql.Peek() >= 0 && _db != null) { using (var reader = _db.Execute(sql, task.Parameters)) { task.ReadResult(reader); } } task.Elapsed = sw.Elapsed; task.Exception = null; task.Executing = false; // update form button selected _synchronizationContext.Post(new SendOrPostCallback(o => { var t = o as TaskData; if (this.ActiveTask?.Id == t.Id) { this.LoadResult(o as TaskData); } }), task); } catch (Exception ex) { task.Executing = false; task.Result = null; task.Elapsed = sw.Elapsed; task.Exception = ex; _synchronizationContext.Post(new SendOrPostCallback(o => { var t = o as TaskData; if (this.ActiveTask?.Id == t.Id) { tabResult.SelectedTab = tabText; this.LoadResult(o as TaskData); } }), task); } // put thread in wait mode task.WaitHandle.Reset(); } task.WaitHandle.Dispose(); }
public static void BindBsonData(this DataGridView grd, TaskData data) { // hide grid if has more than 100 rows grd.Visible = data.Result.Count < 100; grd.Clear(); foreach (var value in data.Result) { var row = new DataGridViewRow(); var doc = value.IsDocument ? value.AsDocument : new BsonDocument { ["[value]"] = value }; if (doc.Keys.Count == 0) { doc["[root]"] = "{}"; } foreach (var key in doc.Keys) { var col = grd.Columns[key]; if (col == null) { grd.Columns.Add(key, key); col = grd.Columns[key]; col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; col.ReadOnly = key == "_id"; } } row.DefaultCellStyle.BackColor = Color.Silver; row.CreateCells(grd); foreach (var key in doc.Keys) { var col = grd.Columns[key]; var cell = row.Cells[col.Index]; cell.Style.BackColor = Color.White; cell.Value = value.IsDocument ? value[key] : value; row.ReadOnly = key == "_id"; } grd.Rows.Add(row); } if (data.LimitExceeded) { var limitRow = new DataGridViewRow(); limitRow.CreateCells(grd); limitRow.DefaultCellStyle.ForeColor = Color.OrangeRed; var cell = limitRow.Cells[0]; cell.Value = "Limit exceeded"; cell.ReadOnly = true; grd.Rows.Add(limitRow); } for (int i = 0; i <= grd.Columns.Count - 1; i++) { var colw = grd.Columns[i].Width; grd.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; grd.Columns[i].Width = Math.Min(colw, 400); } if (grd.Rows.Count == 0) { grd.Columns.Add("no-data", "[no result]"); } grd.ReadOnly = grd.Columns["_id"] == null; grd.Visible = true; }
public static void BindParameter(this ICSharpCode.TextEditor.TextEditorControl txt, TaskData data) { txt.SuspendLayout(); txt.Clear(); txt.SetHighlighting("JSON"); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { var w = new JsonWriter(writer) { Pretty = true, Indent = 2 }; w.Serialize(data.Parameters ?? BsonValue.Null); } txt.Text = sb.ToString(); txt.ResumeLayout(); }
public static void BindBsonData(this ICSharpCode.TextEditor.TextEditorControl txt, TaskData data) { var index = 0; var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { var json = new JsonWriter(writer) { Pretty = true, Indent = 2 }; if (data.Result.Count > 0) { foreach (var value in data.Result) { if (data.Result?.Count > 1) { sb.AppendLine($"/* {index++ + 1} */"); } json.Serialize(value); sb.AppendLine(); } if (data.LimitExceeded) { sb.AppendLine(); sb.AppendLine("/* Limit exceeded */"); } } else { sb.AppendLine("no result"); } } txt.SetHighlighting("JSON"); txt.Text = sb.ToString(); }