小编Vin*_*ves的帖子

包装字符串的WeakReference会导致奇怪的行为

我知道我应该将WeakReference仅用于大型对象,但我对以下场景感到好奇:

object obj = 1; //Int32

var wk = new WeakReference(obj);

Console.WriteLine(wk.IsAlive); //Prints: True

obj = null;

GC.Collect(2, GCCollectionMode.Forced, true);

Console.WriteLine(wk.IsAlive); //Prints: false, All Rigth!
Run Code Online (Sandbox Code Playgroud)

到目前为止,没关系.

看看这个:

object obj = "test"; //String

var wk = new WeakReference(obj);

Console.WriteLine(wk.IsAlive); //Prints: True

obj = null;

GC.Collect(2, GCCollectionMode.Forced, true);

Console.WriteLine(wk.IsAlive); //Prints: True, Why?
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

c#

3
推荐指数
2
解决办法
82
查看次数

Windows消息

我需要发送一个自定义的Windows消息,其中包含另一个应用程序将侦听的自定义ID.

是否存在Windows为内部消息保留的预定义消息ID范围,例如SQL Server(内部消息最多为50.000)?

c# winapi

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

503(服务不可用)状态码的正确使用方法

我有一个简单的 API 端点“api/machines/sum”,它与另一个 API 服务集成来处理值。

有时我正在集成的 API 可能离线/不可用。因此,我尝试返回 503 - 我的 API 无法提供服务,因为我的服务无法使用依赖的 API 离线处理任何内容

我的 API 服务运行正常,但依赖项不行。

从语义上讲,“服务不可用”的描述对我来说是有意义的。503状态码的使用方法是否正确?

样本:

public async Task<IActionResult> Sum(string value)
{
    try
    {
        ProcessValueFromAnotherAPI(id);
    }
    catch (AppIntegrationException)
    {
        return StatusCode(StatusCodes.Status503ServiceUnavailable, "custom message");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# rest http

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

SSDT如何:部署.dacpac而不丢失自定义客户端数据库对象?

我在Visual Studio中使用数据库项目.

在我的场景中,我有客户直观地定制我为他们提供的数据库.

例如,客户端与第三方签订合同为他们创建自定义系统,然后第三方在我的数据库中创建一些表.

我知道我永远不应该允许第三方访问我的数据库,但我正在工作的公司允许这样做.

在部署.dacpac时,如何排除不属于我的架构的这些对象?我想这可能是不可能的,在这种情况下我该怎么办?

sql-server deployment version-control visual-studio sql-server-data-tools

2
推荐指数
1
解决办法
1980
查看次数

实体VS Id作为参数

我正在使用DDD.

我有以下接口:

interface ICustomerRepository 
{
    void Disable(int customerId);
}

interface ICustomerService 
{
    void Disable(int customerId);
}
Run Code Online (Sandbox Code Playgroud)

该应用程序将在WebService上运行.

我想知道,我应该使用id作为参数还是整个Customer实体?

每种方法的优缺点是什么?

c# performance domain-driven-design

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

检测OpenFileDialog

对于DLP软件的一个非常特殊的要求,我试图在捕获所选文件后检测OpenFileDialogs并取消文件选择操作。

我该怎么做呢?

我在鼠标和键盘上挂了一个全局钩子。我检测到用户可以执行的所有操作,以在OpenFileDialog窗口中选择文件。

直到现在我还是不能通过hwnd检测该窗口是否为OpenFileDialog。

我为什么要这样尝试?

我是高级程序员,最初尝试使用Windows挂钩,但没有成功。我尝试了easyhook和deviare2。在COM(IFileDialog)组件调用中似乎没有更简单的方法来放置全局钩子。

是否可以通过hwnd检测窗口是否为默认的Windows OpenFileDialog窗口?

public bool IsOpenFileDialog(IntPtr hwnd)
{
    return ?
}
Run Code Online (Sandbox Code Playgroud)

c# windows hook winapi

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