小编Ste*_*ger的帖子

为什么我的线程不立即启动?

见下面的程序.我用函数abc启动一个新的线程x,然后我做了一些更长的任务.为什么x只在end sub之后开始?不应该在睡觉前立即开始吗?

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x As New Threading.Thread(AddressOf abc)
        x.SetApartmentState(Threading.ApartmentState.MTA)
        x.Start()

        System.Threading.Thread.Sleep(5000)
    End Sub





Sub abc()
    For i As Integer = 0 To 10 Step 1
        Me.lblStatus.Text = "Testing DB connection ( timeout in: " + i.ToString() + "s )"
        'Me.StatusStrip1.Invoke(
        MsgBox(i.ToString)
        System.Threading.Thread.Sleep(1000)
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)



编辑:
解决方案是这样的:

(A)将连接尝试和超时倒计时放入单独的线程中.
(B)像这样更新UI:

    If Me.InvokeRequired Then
        Me.Invoke(pUpdateStatusMessage, "Successfully connected.")
    Else
        UpdateStatusMessage("Successfully connected.")
    End If
Run Code Online (Sandbox Code Playgroud)

使用全局声明,因此不需要传递参数:

Delegate Sub t_pUpdateStatusText(ByVal strMessage As String)
Public …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net multithreading winforms

4
推荐指数
1
解决办法
1235
查看次数

System.Drawing.Image的Nhibernate映射

问题:我得到一个异常,将此类序列化为nHibernate xml文件({"无法确定类型:System.Drawing.Image,System.Drawing,列:NHibernate.Mapping.Column(Settings)"}).

如何将System.Drawing.Image映射到nHibernate?什么MS-SQL dbtype将被使用?

using System;
using System.Collections.Generic;
using System.Text;

namespace nhDBapi.Tables
{

    [NHibernate.Mapping.Attributes.Class(Name = "nhDBapi.Tables.clsSettings, nhDBapi", Table = "lsSettings")]
    public class clsSettings
    {

        [NHibernate.Mapping.Attributes.Id(Name = "Settings", Column = "Settings", TypeType = typeof(System.Drawing.Image))]
        public System.Drawing.Image Settings;

    } // End partial class lsSettings


} // End Namespace nhDBapi.Tables
Run Code Online (Sandbox Code Playgroud)

c# sql vb.net nhibernate nhibernate-mapping

4
推荐指数
1
解决办法
3655
查看次数

如何在不删除文件的情况下清除文本文件?

问题:我有一个ini文件,在向其添加信息之前我需要清除它.

不幸的是,如果我只删除文件,权限也会消失.

有没有办法删除文件的内容而不删除文件?

.net c# vb.net

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

为什么SendMessageTimeout不更新环境变量?

问题:我有一个安装程序,它会随程序安装一些本机dll.dll位于一个单独的文件夹中,我将其添加到路径环境变量中.

这已成功完成,如果我检查Windows系统设置,变量将显示在路径中.

但是,如果我启动命令行程序/服务,它说dll未找到...

我用set命令检查环境变量路径,我的文件夹不在那里.

如果我做

SET path = %path%;my/folder/here/
Run Code Online (Sandbox Code Playgroud)

然后启动我的程序,然后它的工作原理.

根据这篇MS KB文章,这是因为需要重新启动计算机.

除非我这样做

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);            
Run Code Online (Sandbox Code Playgroud)

现在我只使用下面的代码,但错误消息仍然存在.%path%中的我的文件夹拼写正确,我检查了一下.

我究竟做错了什么 ?

' http://www.pinvoke.net/default.aspx/Enums/SendMessageTimeoutFlags.html '
<Flags()> _
Public Enum SendMessageTimeoutFlags
    SMTO_NORMAL = 0
    SMTO_BLOCK = 1
    SMTO_ABORTIFHUNG = 2
    SMTO_NOTIMEOUTIFNOTHUNG = 8
End Enum    

' http://ghouston.blogspot.com/2005/08/how-to-create-and-change-environment.html '
Public Const HWND_BROADCAST As Integer = &HFFFF
Public Const WM_SETTINGCHANGE As Integer = &H1A    

' http://pinvoke.net/default.aspx/user32.SendMessageTimeout '
<System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SendMessageTimeout(ByVal windowHandle As IntPtr, ByVal Msg …
Run Code Online (Sandbox Code Playgroud)

.net vb.net pinvoke environment-variables

4
推荐指数
1
解决办法
3961
查看次数

C#:根据框架版本加载引用的程序集?

仅当.NET Framework版本小于特定数字时才可以加载引用的程序集吗?

我在.NET 2.0上使用自制的LINQ库,但如果框架是3.5+,它应该使用M $ LINQ库,而忽略自制的库.

编辑:
这是我的图书馆:http:
//linq4you.codeplex.com/

.net c# vb.net visual-studio-2010

4
推荐指数
1
解决办法
645
查看次数

为什么这段代码总是会出现SynchronizationLockException?

这段代码出了什么问题?

我总是得到一个

从不同步的代码块调用对象同步方法

例外

System.Threading.Monitor.Exit(m_sqlConnection)
Run Code Online (Sandbox Code Playgroud)

但是......无论我将Monitor语句放在try-catch-finally-block内部还是外部,无论如何组合,我总是得到这个异常.

也就是说,在我编译代码之后.如果我在获得第一个异常后让它再次运行,它运行正常...它总是在重新编译之后......

Public Shared Function GetDataTable(ByRef strSQL As String, ByRef dt As System.Data.DataTable, Optional ByRef strTableName As String = "ThisTable") As Integer
            Dim daQueryTable As System.Data.SqlClient.SqlDataAdapter = Nothing



            Try
                System.Threading.Monitor.TryEnter(m_sqlConnection, 5000)

                If isDataBaseConnectionOpen() = False Then OpenSQLConnection()


                daQueryTable = New System.Data.SqlClient.SqlDataAdapter(strSQL, m_sqlConnection)
                dt = New System.Data.DataTable(strTableName)

                daQueryTable.Fill(dt)
            Catch ex As Exception
                Log(ex)
                Return -1
            Finally
                m_sqlConnection.Close()
                System.Threading.Monitor.Exit(m_sqlConnection)
                daQueryTable.Dispose()
                daQueryTable = Nothing
            End Try

            Return dt.Rows.Count
        End Function ' GetDataTable
Run Code Online (Sandbox Code Playgroud)

C#版本:

public static int GetDataTable(ref string …
Run Code Online (Sandbox Code Playgroud)

c# vb.net multithreading locking

4
推荐指数
1
解决办法
6512
查看次数

如何在PostgreSQL中测试if语句?

问题:我想测试PostgreSQL中的if语句:

IF (SELECT COUNT(*) FROM pg_language WHERE lanname = 'plpgsql') > 0 THEN
    PRINT 'Good'
ELSE
    PRINT 'Bad'
END IF;
Run Code Online (Sandbox Code Playgroud)

现在这会在IF处抛出错误.

据我所知,这是因为我需要使用plpgsql来使用if,print和variables.

到目前为止,我可能还必须使用SELECT而不是print.

在将此语句执行到plpgsql之前,如何切换语言?

我想先测试它,然后我把它放在存储过程中.用变量等测试代码


编辑:

解决方案:

DO LANGUAGE plpgsql $$
    BEGIN
        IF (SELECT COUNT(*) FROM pg_language WHERE lanname = 'plpgsql') > 0 THEN 
            RAISE NOTICE 'GOOD';
        ELSE
            RAISE NOTICE 'BAD';
        END IF;
    END;
$$;
Run Code Online (Sandbox Code Playgroud)

sql postgresql plpgsql

4
推荐指数
1
解决办法
1万
查看次数

为什么MS-SQL-Server(所有版本)将1.0/12.0转换为数字(8,6)?

我试图解释101.10的价值差异.

303'300'000/12约为25'275'000.
但是,根据MS-SQL,它是25'274'898.90.

考虑这个(愚蠢的)SQL语句:

SELECT 
     303300000.00/12.0 AS a 
    ,1.0/12.0*303300000.00 AS b
    ,1.0/12.0 AS omg 
    ,1.0/CAST(12.0 AS float) AS expected 
    ,0.083333*303300000.0 AS r1 
    ,0.083333333333333300 * 303300000.0 AS r2
Run Code Online (Sandbox Code Playgroud)

惊人的结果

我以为自从我写了1.0/12.0后它就会变成浮动
(这本身是愚蠢的,但这是另一个故事),
但显然,它是decimal (8,6)

CREATE VIEW dbo._Test
AS
SELECT 1.0/12.0 as xxx



SELECT 
     COLUMN_NAME
    ,DATA_TYPE
    ,NUMERIC_PRECISION
    ,NUMERIC_SCALE
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '_Test' 


DROP VIEW dbo._Test
Run Code Online (Sandbox Code Playgroud)

这种疯狂有什么理由吗?
它如何确定精度?
有没有强制浮动的符号,而不需要演员声明?

如果我在PostgreSQL上运行相同的查询,pg就是正确的...

postgre做对了

sql t-sql sql-server sql-server-2008 sql-server-2016

4
推荐指数
1
解决办法
117
查看次数

在X11上激活一个窗口,为什么我会丢失标题栏?

使用波纹管代码,我在X11上激活一个窗口.

我正在使用FindWindow来获取窗口句柄,它工作得很好.然后我想把指定的窗口放在前台.为此,我使用XRaiseWindow.

XRaiseWindow(display, wdThisWindow);
Run Code Online (Sandbox Code Playgroud)

但是,XRaiseWindow在某些窗口上不起作用(很多,但不是全部).我想这是因为他们的override_redirect WindowAttribute没有设置为true.所以我使用XChangeWindowAttributes将此属性设置为true.现在,XRaiseWindow将所有窗口都带到了顶部.问题是,EyeOfGnome(图片浏览器)和所有其他应用程序都丢失了顶部的标题栏...(你知道,右边有一个关闭控件的那个......).更糟糕的是,窗户不再出现在后台......

我想如果我在提升窗口后设置了override_redirect属性,问题就会消失.但是......问题现在已经从所有应用程序(例如gnome-terminal)消失了 - 除了EyeOfGnome(图片查看器)......

我错过了什么,或者这是一个EyeOfGnome问题,还是一般的GTK问题?

这是导致问题的部分代码:

XSetWindowAttributes xswa;
xswa.override_redirect = True;
XChangeWindowAttributes(display, wdThisWindow, CWOverrideRedirect, &xswa);
XRaiseWindow(display, wdThisWindow);
xswa.override_redirect = False;
XChangeWindowAttributes(display, wdThisWindow, CWOverrideRedirect, &xswa);
XSetInputFocus(display, wdThisWindow, RevertToNone, CurrentTime);
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>



// Info: xwininfo
// I am compiling using 
// gcc -o activate activate.c -L/usr/X11R6/lib -lX11


// ERROR HANDLER, GENERIC
static int ErrorHandler (Display *display, XErrorEvent *error)
{
   //printf ("\r\n error! \r\n");// gcc …
Run Code Online (Sandbox Code Playgroud)

c linux x11 gtk xlib

3
推荐指数
1
解决办法
2725
查看次数

如何从Firebird中的非表中选择数据?

我正在寻找火鸟 - 相当于:

SELECT 'abc' AS abc, 123 AS def, '20110101' AS dt
Run Code Online (Sandbox Code Playgroud)

每当我这样做

SELECT 'whatever' as xxx 
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息.

sql syntax firebird

3
推荐指数
1
解决办法
803
查看次数