小编Tim*_*mwi的帖子

C#:如何防止应用程序的两个实例同时执行相同的操作?

如果你在一个应用程序中有两个线程,并且你不希望它们同时运行某段代码,你就可以锁定这段代码,如下所示:

lock (someObject) {
    // ... some code
}
Run Code Online (Sandbox Code Playgroud)

但是你如何在不同的流程中做同样的事情呢?我认为这是你使用"全局互斥"的原因,所以我Mutex以各种方式尝试了这个类,但它似乎不符合我的要求,它们是:

  • 如果您是唯一的实例,请继续运行代码.
  • 如果您是第二个实例,请等待第一个实例完成,然后运行代码.
  • 不要抛出异常.

我遇到的问题:

  • 只是Mutexusing(){...}子句中实例化一个对象似乎没有做任何事情; 两个实例仍然愉快地同时运行
  • 调用.WaitOne()互斥锁导致第一个实例运行而第二个实例等待,但第二个实例无限期等待,即使在第一次调用.ReleaseMutex()并离开using(){}范围之后也是如此.
  • .WaitOne()当第一个进程退出(System.Threading.AbandonedMutexException)时抛出异常.

我该如何解决这个问题?不涉及的解决方案Mutex非常受欢迎,特别是因为它Mutex似乎是特定于Windows的.

.net c# mutex mutual-exclusion

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

将表达式树作为参数传递给另一个表达式树

我有两个表达式树定义如下:

private Expression<Func<TEntity, TPropertyResult>> PropertyAccessor { get; set; }
Run Code Online (Sandbox Code Playgroud)

private Expression<Func<TPropertyResult, bool>> TestExpression { get; set; }
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的表达式树,它将产生相当于:

var expression = p => this.TestExpression(this.PropertyAccessor(p));
Run Code Online (Sandbox Code Playgroud)

使用时Expression.Invoke(this.TestExpression, this.PropertyAccessor),我收到以下错误

{"类型'System.Func`2 [MyEntity,System.String]'的表达式不能用于'System.String'类型的参数"}

TPropertyResult 我测试时是一个字符串.

我试过用Expression.Call或者Expression.Invoke.没运气.我该怎么用?

c# lambda expression-trees

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

在.Net中使用条件运算符的奇怪行为

这让我非常难过.也许我现在太累了.

    Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height);
    Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value;

    if (inputArea == null)
        cropArea = rectangle;
Run Code Online (Sandbox Code Playgroud)

inputArea是一个可以为null的Rectangle,在我的特定情况下为null.

前两个语句将cropArea初始化为0.然而,第二个语句根据图像宽度和高度生成正确的cropArea.我是否误解了条件运算符的任何内容?当inputArea = null时,它似乎不返回矩形?使用值类型时是否有任何怪癖?

编辑:好吧,我应该先尝试一下:重启VS. 似乎调试器骗了我,或者其他东西.无论如何,现在工作.谢谢.

.net c# nullable value-type conditional-operator

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

如何在使用通用约束时使用继承

在尝试实现允许继承并希望有人可以提供帮助的库时,我正在努力解决一些通用约束问题.

我正在尝试建立一个有三种口味的类库,每个库都建立在另一个之上.对我来说,这似乎是一个使用泛型的绝佳机会,因为我不能通过纯粹的继承做我想做的事.下面的代码(这应该直接粘贴到VS)后面有一些解释:

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

namespace Test
{
    #region Base Classes

    public class GenericElement { }

    /// <summary>Visit to a GenericElement</summary>
    public class Generic_Visit<E> where E : GenericElement
    {
        public E Element { get; set; }
    }

    /// <summary>Collection of Visits</summary>
    public class Generic_Route<V, E>
        where V : Generic_Visit<E>
        where E : GenericElement
    {
        public List<V> Visits { get; set; }
        public Double Distance { get; set; }
    }

    /// <summary>Collection of Routes</summary>
    public class …
Run Code Online (Sandbox Code Playgroud)

c# generics inheritance

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

.NET中的线程池和.IsBackground

MSDN以及许多其他来源声称线程池中的工作线程始终是后台.

"线程池线程是后台线程." (MSDN)

"汇集的线程总是后台线程." (在C#中穿线,Joseph Albahari)

我可以通过设置轻松地使工作线程非背景

Thread.CurrentThread.IsBackground = false;
Run Code Online (Sandbox Code Playgroud)

应用程序将等待线程完成.

这有什么问题?

.net c# multithreading threadpool

7
推荐指数
3
解决办法
5260
查看次数

如何确定特定的DOM元素是否可见?

使用jQuery,确定特定元素是否可见的最简单方法是什么?我并不是指在当前视口中可见,而是在页面上.

理想情况下,false如果元素或其任何祖先具有CSS规则(例如display: none或),则函数应返回visibility: hidden.无需担心overflow: hidden.

jquery dom visibility

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

System.Windows.Forms.WebBrowser似乎是禁用java脚本?

我遇到了System.Windows.Forms.WebBrowser的问题

在每台机器上,除了一台机器,它工作正常,但在这台机器上,JavaScript 似乎在控件试图呈现的页面上被禁用.

我已经完成了我能找到的与它相关的每个系统设置,并告诉它允许JavaScript,但没有骰子.我无法在任何地方找到有关类似问题的任何信息,而且我完全难过了.

几乎所有建议都受到欢迎(即使它涉及将此问题移交给SuperUser)

为了进一步让我感到沮丧,当我在Internet Explorer中浏览时,同样的页面显示javascript正常工作 - 此问题仅在我的应用程序中运行时才会显示.

编辑:系统是安装了最新服务包等的Windows Vista,并且在连接到VPN时正在查看该页面

c# internet-explorer webbrowser-control

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

如何使用代码合并列中的单元格?

C#,ASP.NET,VS08,使用HTML表.

我想合并单元格 - rowspan和colspan跨越它但不合并它.

为了清晰的画面,

  • 在设计视图上拖动HTML表格控件
  • 选择列的单元格
  • 右键单击,修改,合并

我想在按钮点击的C#编码中以编程方式执行此操作.

html c# code-behind visual-studio-2008

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

如何使用C#获取系统的MAC ID

我正在构建一个C#应用程序,我想获取系统的MAC ID.我找到了很多代码片段,但是他们要么给出错误的答案,要么抛出异常.我不确定哪个代码段正在给出正确的答案.有人能为我提供获取MAC ID的确切代码段吗?

.net c#

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

C#比较两个匹配单词的字符串

我有两个包含字母和数字的字符串,用空格分隔.前"elza7ma wa2fa fel matab"和"2ana ba7eb el za7ma 2awy 2awy"

比较这两个字符串以查明它们是否有共同字的最快方法是什么?

我尝试使用string.split拆分其中一个,并在整个单词数组中使用string.compare.但这很慢,因为我会比较很多字符串.

c# string

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