小编Moo*_*ght的帖子

RichTextBox BeginUpdate()EndUpdate()扩展方法不起作用

我有一个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)

.net c# extension-methods richtextbox

6
推荐指数
1
解决办法
2578
查看次数

SQL Set IDENTITY字段使用变量

全部,我想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中的种子值.我怎样才能实现我的目标?

谢谢你的时间.

t-sql dynamic-sql identity-column sql-server-2008

6
推荐指数
2
解决办法
2万
查看次数

c#如果触发了DataError,则获取单元格文本值

我有一个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)

或任何其他过程,以获取错误文本.

c# datagridview

6
推荐指数
1
解决办法
5298
查看次数

OS X 上的 libg2o 链接器错误

我收到以下链接器错误:

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)

macos cmake clang undefined-symbol g2o

6
推荐指数
1
解决办法
561
查看次数

从同一个表中的逗号分隔列更新行列

我有以下表定义

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)

SQL小提琴在这里.

现在,我想分割每行的代码并填充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)

sql t-sql common-table-expression sql-server-2012

6
推荐指数
1
解决办法
179
查看次数

我应该使用BackgroundWorker或Threads吗?

总之,我已经成功使用了这些ThreadBackgroundWorker类,以便为一些小规模应用程序提供流畅的UI.我最近得到了将大量代码从串口转换为多线程的工作,由于我在这个网站上看到的一些评论,我有一些问题.我必须转换的代码对SQL Server进行不同数量(通常是大量)的调用,这些SQL查询有时可以运行30分钟左右.因此,需要多线程.

我已经设置了一个测试程序BackgroundWorker,这些程序运行良好.但是,有人说由于BackgroundWorker使用了Thread-Pool,它们不应该用于长时间运行的任务.我没有在任何地方读过这个(即Joesph Albahari C#4.0在果壳中),这与MSDN相矛盾.我应该使用BackgroundWorker还是Thread出于此目的?

提前致谢.

c# multithreading

5
推荐指数
2
解决办法
1510
查看次数

如何在 C# 中正确地多线程调用在运行时调用的 DLL

全部,

我希望编写一个插件 .dll 以供在运行时调用的 .NET 应用程序使用/调用。我的 .dll 是一个 WinForm 并显示正在执行的(计算成本高的)操作。从主应用程序调用的 .dll 是通过 .NET 调用的System.Reflection。我必须向调用应用程序提供NameSpaceClass和我想要调用的方法

我想对我的 .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)

c# dll multithreading winforms

5
推荐指数
1
解决办法
7282
查看次数

TPL如何进行'回叫'

我有一个小应用程序,需要测试多个连接的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,默认情况下,此池化线程是后台线程; 但它似乎不是一个问题.谢谢你的时间.

c# multithreading callback task-parallel-library

5
推荐指数
2
解决办法
3351
查看次数

定义通用方法

全部,我有一个方法,目前用于调用返回类型的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)

c# generics

5
推荐指数
1
解决办法
471
查看次数

覆盖WinForms MessageBox控件

总而言之,我理解对于广泛定制的对话框,我需要创建自己的表单和ShowDialog().但是,在我目前的情况下,我只想扩展MessageBox类,以便CustomMessageBox能够显示由系统确定的不同图标.

我之前没有覆盖过这样的控制,我甚至不知道从哪里开始.有人能指出我正确的方向吗?

谢谢你的时间.

c# overriding dialog winforms

5
推荐指数
1
解决办法
3398
查看次数