小编jom*_*omi的帖子

使用ClickOnce阻止部署调试版本

我正在使用VS2008发布ClickOnce应用程序,但在每次发布之前我都必须手动切换到Release配置.这是好的,只要我不忘记切换.有没有办法阻止部署调试版本?是否有一些编译器指令,如:

#if DEBUG
#if ClickOnce
#error You cannot publish a debug build
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

或者有没有一种方法(没有构建脚本)在发布之前自动切换到Release配置?

(我发现了一些类似的问题,但不喜欢它们上面的问题)

谢谢

c# deployment clickonce debug-build

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

Gui重新管理等待

我在使用NotifyIcons时发现了一个重入问题.重现起来非常简单,只需在表单上删除NotiftIcon,click事件应如下所示:

private bool reentrancyDetected;
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if (reentrancyDetected) MessageBox.Show("Reentrancy");
    reentrancyDetected = true;
    lock (thisLock)
    {
        //do nothing
    }
    reentrancyDetected = false;
}
Run Code Online (Sandbox Code Playgroud)

同时启动后台线程会导致一些争用:

private readonly object thisLock = new object();
private readonly Thread bgThread;
public Form1()
{
    InitializeComponent();
    bgThread = new Thread(BackgroundOp) { IsBackground = true };
    bgThread.Start();
}

private void BackgroundOp()
{
    while (true)
    {
        lock (thisLock)
        {
            Thread.Sleep(2000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您开始单击notifyicon,将弹出消息,指示重入.我知道为什么STA中的托管等待应该为某些窗口泵送消息的原因.但是我不确定为什么要通知notifyicon的消息.还有一种方法可以在进入/退出方法时避免使用一些布尔指示器进行抽吸吗?

c# user-interface multithreading reentrancy

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