我有一个richTextBox我用来执行一些语法高亮.这是一个小编辑工具,所以我没有编写自定义语法高亮显示器 - 而是使用Regexs并使用事件的事件处理程序检测输入延迟时更新Application.Idle:
Application.Idle += new EventHandler(Application_Idle);
Run Code Online (Sandbox Code Playgroud)
在事件处理程序中,我检查文本框是否处于非活动状态:
private void Application_Idle(object sender, EventArgs e)
{
// Get time since last syntax update.
double timeRtb1 = DateTime.Now.Subtract(_lastChangeRtb1).TotalMilliseconds;
// If required highlight syntax.
if (timeRtb1 > MINIMUM_UPDATE_DELAY)
{
HighlightSyntax(ref richTextBox1);
_lastChangeRtb1 = DateTime.MaxValue;
}
}
Run Code Online (Sandbox Code Playgroud)
但即使对于相对较小的亮点RichTextBox,它也会大量闪烁,而且没有任何richTextBox.BeginUpdate()/EndUpdate()方法.为了解决这个问题,我找到了汉斯帕斯特(Hans Passant)类似困境的答案(汉斯帕斯特从未让我失望!):
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class MyRichTextBox : RichTextBox
{
public void BeginUpdate()
{
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
}
public …Run Code Online (Sandbox Code Playgroud) 全部,我想IDENTITY根据从另一个表获得的当前最大值开始字段的编号.所以我尝试了类似下面的内容
DECLARE @CurrentES INT;
SET @CurrentES = (SELECT MaxES
FROM [NDB]..[TmpMaxES]) + 1;
ALTER TABLE BA
ADD ES INT IDENTITY(@CurrentES, 1);
Run Code Online (Sandbox Code Playgroud)
但是这不会接受变量作为IDENTITY中的种子值.我怎样才能实现我的目标?
谢谢你的时间.
我有一个DataGridView,我通过以下代码从我的数据库动态填充它
DataGridViewTextBoxColumn colID = new DataGridViewTextBoxColumn();
colID.HeaderText = "id";
colID.DataPropertyName = "id";
colID.ReadOnly = true;
colID.Visible = false;
dtgvLoadEx.Columns.Add(colID);
DataGridViewTextBoxColumn colLoadExpiryDate = new DataGridViewTextBoxColumn();
//CalendarColumn colLoadExpiryDate = new CalendarColumn();
colLoadExpiryDate.HeaderText = "LoadExpiryDate(mm/dd/yy)";
colLoadExpiryDate.Width = 158;
colLoadExpiryDate.DataPropertyName = "LoadExpiryDate";
colLoadExpiryDate.ReadOnly = false;
colLoadExpiryDate.MaxInputLength = 10;
dtgvLoadEx.Columns.Add(colLoadExpiryDate);
dtgvLoadEx.DataSource = data(); //Return data table from my Database
Run Code Online (Sandbox Code Playgroud)
如你所见,我有一个Date专栏.当我尝试编辑该列的单元格并键入无效格式时,DataError将触发该事件.
现在我只想从中获取错误文本
private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) {
}
Run Code Online (Sandbox Code Playgroud)
或任何其他过程,以获取错误文本.
我收到以下链接器错误:
cd /Users/mhoggan/Development/bluenote/image_pose_adjustment/image_pose_adjustment/native/graph/cmake-build-debug/src && /Applications/CLion.app/Contents/bin/cmake/bin/cmake -E cmake_link_script CMakeFiles/graph_optimization.dir/link.txt --verbose=1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -std=c++11 -Wall -Werror -O3 -DNDEBUG -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/graph_optimization.dir/main.cpp.o CMakeFiles/graph_optimization.dir/BundleRigidGraphOptimizer.cpp.o CMakeFiles/graph_optimization.dir/FlexibleGraphOptimizer.cpp.o CMakeFiles/graph_optimization.dir/LoopClosure.cpp.o CMakeFiles/graph_optimization.dir/PoseJsonReader.cpp.o -o graph_optimization -L/Users/mhoggan/Development/bluenote/image_pose_adjustment/image_pose_adjustment/native/graph/cmake-build-debug/g2o-src/lib /usr/local/lib/libboost_filesystem-mt.a /usr/local/lib/libboost_system-mt.a -lg2o_cli -lg2o_core -lg2o_interface -lg2o_parser -lg2o_solver_csparse -lg2o_solver_dense -lg2o_solver_pcg -lg2o_stuff -lg2o_types_icp -lg2o_types_sba -lg2o_types_sim3 -lg2o_types_slam2d -lg2o_types_slam3d -lg2o_csparse_extension -lcsparse -ljsoncpp -Wl,-rpath,/Users/mhoggan/Development/bluenote/image_pose_adjustment/image_pose_adjustment/native/graph/cmake-build-debug/g2o-src/lib
Undefined symbols for architecture x86_64:
"g2o::csparse_extension::cs_cholsolsymb(cs_sparse const*, double*, cs_symbolic const*, double*, int*)", referenced from:
g2o::LinearSolverCSparse<Eigen::Matrix<double, -1, -1, 0, -1, -1> >::solve(g2o::SparseBlockMatrix<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, double*, double*) in LoopClosure.cpp.o
"g2o::csparse_extension::writeCs2Octave(char const*, cs_sparse const*, …Run Code Online (Sandbox Code Playgroud) 我有以下表定义
CREATE TABLE _Table
(
[Pat] NVARCHAR(8),
[Codes] NVARCHAR(50),
[C1] NVARCHAR(6),
[C2] NVARCHAR(6),
[C3] NVARCHAR(6),
[C4] NVARCHAR(6),
[C5] NVARCHAR(6)
);
GO
INSERT INTO _Table ([Pat], [Codes], [C1], [C2], [C3], [C4], [C5])
VALUES
('Pat1', 'U212,Y973,Y982', null, null, null, null, null),
('Pat2', 'M653', null, null, null, null, null),
('Pat3', 'U212,Y973,Y983,Z924,Z926', null, null, null, null, null);
GO
Run Code Online (Sandbox Code Playgroud)
现在,我想分割每行的代码并填充Cn列,以便最终得到
Pat Codes C1 C2 C3 C4 C5
Pat1 'U212,Y973,Y982' U212 Y973 Y982 NULL NULL
Pat2 'M653' M653 NULL NULL NULL NULL …Run Code Online (Sandbox Code Playgroud) 总之,我已经成功使用了这些Thread和BackgroundWorker类,以便为一些小规模应用程序提供流畅的UI.我最近得到了将大量代码从串口转换为多线程的工作,由于我在这个网站上看到的一些评论,我有一些问题.我必须转换的代码对SQL Server进行不同数量(通常是大量)的调用,这些SQL查询有时可以运行30分钟左右.因此,需要多线程.
我已经设置了一个测试程序BackgroundWorker,这些程序运行良好.但是,有人说由于BackgroundWorker使用了Thread-Pool,它们不应该用于长时间运行的任务.我没有在任何地方读过这个(即Joesph Albahari C#4.0在果壳中),这与MSDN相矛盾.我应该使用BackgroundWorker还是Thread出于此目的?
提前致谢.
全部,
我希望编写一个插件 .dll 以供在运行时调用的 .NET 应用程序使用/调用。我的 .dll 是一个 WinForm 并显示正在执行的(计算成本高的)操作。从主应用程序调用的 .dll 是通过 .NET 调用的System.Reflection。我必须向调用应用程序提供NameSpace、Class和我想要调用的方法。
我想对我的 .dll 进行多线程处理,以便它对 UI 更加友好,而且我只对BackgroundWorkers非常熟悉。
编辑:问题的扩展。
所以,我调用 .dll 如下:
if (classType != null)
{
if (bDllIsWinForm)
{
classInst = Activator.CreateInstance(classType);
Form dllWinForm = (Form)classInst;
dllWinForm.Show();
// Invoke required method.
MethodInfo methodInfo = classType.GetMethod(strMethodName);
if (methodInfo != null)
{
object result = null;
// The method being called in this example is 'XmlExport'.
result = methodInfo.Invoke(classInst, new …Run Code Online (Sandbox Code Playgroud) 我有一个小应用程序,需要测试多个连接的SQL连接字符串(每个连接一次完成).要做到这一点,我ConnectionTimeout = 5暂时设置为避免漫长的等待,如果连接无效和ConnectionTimeout = 0(等待永远),比如说.
为了避免在我们尝试Open()连接错误时挂起UI (即使ConnectionTimeout = 5等待时间SqlException可能长达20秒),我想使用任务并行库(TPL)在单独的线程上运行测试.所以我剥离了我的新线程,如:
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
Run Code Online (Sandbox Code Playgroud)
问题是这仍然是锁定UI(显然),因为它在返回调用者之前等待结果.如何让代码返回控制到UI(腾出GUI),而从异步获取最终的结果Task?
另外,Task我可以从合法的范围内做到MessageBox.Show("Some message")吗?这不起作用BackgroundWorkers,默认情况下,此池化线程是后台线程; 但它似乎不是一个问题.谢谢你的时间.
全部,我有一个方法,目前用于调用返回类型的DLL bool,这很好用.这个方法是
public static bool InvokeDLL(string strDllName, string strNameSpace,
string strClassName, string strMethodName,
ref object[] parameters,
ref string strInformation,
bool bWarnings = false)
{
try
{
// Check if user has access to requested .dll.
if (!File.Exists(Path.GetFullPath(strDllName)))
{
strInformation = String.Format("Cannot locate file '{0}'!",
Path.GetFullPath(strDllName));
return false;
}
else
{
// Execute the method from the requested .dll using reflection.
Assembly DLL = Assembly.LoadFrom(Path.GetFullPath(strDllName));
Type classType = DLL.GetType(String.Format("{0}.{1}",
strNameSpace, strClassName));
if (classType != null)
{
object classInstance = Activator.CreateInstance(classType); …Run Code Online (Sandbox Code Playgroud) 总而言之,我理解对于广泛定制的对话框,我需要创建自己的表单和ShowDialog().但是,在我目前的情况下,我只想扩展MessageBox类,以便CustomMessageBox能够显示由系统确定的不同图标.
我之前没有覆盖过这样的控制,我甚至不知道从哪里开始.有人能指出我正确的方向吗?
谢谢你的时间.
c# ×7
t-sql ×2
winforms ×2
.net ×1
callback ×1
clang ×1
cmake ×1
datagridview ×1
dialog ×1
dll ×1
dynamic-sql ×1
g2o ×1
generics ×1
macos ×1
overriding ×1
richtextbox ×1
sql ×1