我能够通过从IDictionary派生并定义一个私有的SyncRoot对象,在C#中实现一个线程安全的Dictionary:
public class SafeDictionary<TKey, TValue>: IDictionary<TKey, TValue>
{
private readonly object syncRoot = new object();
private Dictionary<TKey, TValue> d = new Dictionary<TKey, TValue>();
public object SyncRoot
{
get { return syncRoot; }
}
public void Add(TKey key, TValue value)
{
lock (syncRoot)
{
d.Add(key, value);
}
}
// more IDictionary members...
}
Run Code Online (Sandbox Code Playgroud)
然后,我在整个消费者(多个线程)中锁定此SyncRoot对象:
例:
lock (m_MySharedDictionary.SyncRoot)
{
m_MySharedDictionary.Add(...);
}
Run Code Online (Sandbox Code Playgroud)
我能够使它工作,但这导致了一些丑陋的代码.我的问题是,是否有更好,更优雅的方式来实现线程安全的字典?
使用WSDualHttpBinding进行双工回调是否适用于实际场景?说,我有一个使用随机端口的.NET应用程序,该服务是否能够解析客户端的基地址和端口以进行回调?
我在SQL Server数据库的表中有一个字段(比方说,foo),该表最初定义为可为空,但新要求表明此字段必须为非null.
在不删除表内容的情况下,通过更新脚本将此字段更新为非null的最佳方法是什么?我尝试从"设计"视图生成脚本,但在执行期间失败,因为表的当前内容具有foo的NULL值.更糟糕的是,如果我忽略了这个错误,它会继续删除表中的所有内容!
我正在使用 System.Net 命名空间中的 FtpWebRequest 和 FtpWebResponse 对象来发出 LIST 命令。我遇到的问题是我要连接的 FTP 服务器没有实现 OPTS 命令。
有没有办法阻止 FtpWebRequest 发出 OPTS 命令?
在我的C#项目中,我已经处理了解析SGML文件的任务,并且非常天真地尝试使用XmlReader,这引起了一些有趣的启示(即SGML和格式正确的XML之间的区别,等等)。 )
因此,我认为我只需要一个不错的SGML解析器,即可将其转换为XML文件并从那里进行。在搜索中,我找到了两个可以与C#项目集成的SGML解析器:
还有其他建议吗?
我有一个名为 Foo 的 C# .NET 库,它生成一个 Foo.dll 文件。它也可以通过 .config 文件进行配置,如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Foo.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<applicationSettings>
<Foo.Properties.Settings>
<setting name="Server" serializeAs="String">
<value>localhost</value>
</setting>
</Foo.Properties.Settings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我想要做的是从名为 Bar 的非托管 C++ 程序调用此 .NET 库中的函数,并能够从非托管 C++ 应用程序更改其配置。通过在 Foo 中将类/接口属性 ComVisible 设置为 true,我能够从 Bar 调用 Foo 函数。但是,我无法从非托管 C++ 应用程序更改 .config 文件值——服务器始终为 "localhost"。
我正在尝试做什么——从非托管 C++ 配置 .NET 库——甚至可能吗?
.net ×3
c# ×3
c++ ×1
callback ×1
collections ×1
com ×1
duplex ×1
ftp ×1
sgml ×1
sql-server ×1
system.net ×1
t-sql ×1
unmanaged ×1
wcf ×1