我已经阅读了一些SO帖子,似乎缺少最基本的操作.
public enum LoggingLevel
{
Off = 0,
Error = 1,
Warning = 2,
Info = 3,
Debug = 4,
Trace = 5
};
if (s == "LogLevel")
{
_log.LogLevel = (LoggingLevel)Convert.ToInt32("78");
_log.LogLevel = (LoggingLevel)Enum.Parse(typeof(LoggingLevel), "78");
_log.WriteDebug(_log.LogLevel.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这没有例外,它很乐意存储78.有没有办法验证进入枚举的值?
在我的多线程ASMX web服务,我有我自己的类型SystemData的类别字段_allData它由数List<T>和Dictionary<T>标记为volatile.系统data(_allData)会偶尔刷新一次,我会通过创建另一个被调用的对象newData并用新数据填充它的数据结构来实现.当它完成后我就分配了
private static volatile SystemData _allData
public static bool LoadAllSystemData()
{
SystemData newData = new SystemData();
/* fill newData with up-to-date data*/
...
_allData = newData.
}
Run Code Online (Sandbox Code Playgroud)
这应该工作,因为赋值是原子的,并且具有对旧数据的引用的线程继续使用它,而其余的在分配之后具有新的系统数据.然而,我的同事说,volatile我应该使用,而不是使用关键字和简单的InterLocked.Exchange分配,因为他说在某些平台上,不能保证引用赋值是原子的.另外:当我宣布the _allData字段volatile的
Interlocked.Exchange<SystemData>(ref _allData, newData);
Run Code Online (Sandbox Code Playgroud)
产生警告"对易变场的引用不会被视为不稳定的"我应该怎么看待这个?
这就是我得到的:
protected override void OnStart(string[] args)
{
if (SomeApp.Initialize())
{
SomeApp.StartMonitorAndWork();
base.OnStart(args);
}
}
protected override void OnStop()
{
SomeApp.TearDown();
base.OnStop();
}
Run Code Online (Sandbox Code Playgroud)
这里Initialize读取一个配置文件,如果有错,那就没什么可做的,所以服务应该停止!如果配置正常StartMonitorAndWork启动:
Timer(new TimerCallback(DoWork), null, startTime, loopTime);
Run Code Online (Sandbox Code Playgroud)
和DoWork定期轮询数据库.
如果Initialize失败(我检查日志文件),我尝试从管理工具 - >服务停止服务,我得到:
Could not stop the SomeService on Local Computer. The service did not return an error. This could be internal Windows error or an internal service error. If the problem persists, contact system administrator.
The question is: "Is exiting OnStart without doing nothing enough if Initialize returns false?
或者应该有这样的事情: …
我正在创建asmx Web服务,并且必须创建线程来执行后台IO来刷新系统数据.什么是正确的方法?我对创建线程没有任何结果感兴趣.我只是希望ASP.NET工作线程创建一个执行它加载的线程,最后进行一次分配(我认为分配_alldata = newData是原子,我自己的大结构类SystemData的两个实例)所以创建的工作线程新线程可以立即传播.
我读了一篇文章http://msdn.microsoft.com/fi-fi/magazine/cc164128%28en-us%29.aspx#S2,建议使用非线程池线程.然而,文章是关于不同/更复杂的情况,并没有帮助我这么多.
谢谢:马蒂
PS.我也问过这个问题,在asmx web服务中为数据库IO生成线程的正确方法是什么?但这个问题太复杂了.
我一直习惯使用变量和赋值.现在我喜欢这个类DbProviderConnection:
public class DbProviderConnection : IDisposable
{
public DbConnection Connection { get; set; }
public DbTransaction Transaction { get; set; }
public DbTransaction BeginTransaction()
{
Transaction = Connection.BeginTransaction();
return Transaction;
}
//... and so on
}
Run Code Online (Sandbox Code Playgroud)
现在我想像这样使用它:
using (DbProviderConnection cnctn = _planDb.CreateOpenConnection())
{
using (cnctn.BeginTransaction())
{
//...
cnctn.Transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:DbProviderConnection.Transaction.Dispose被叫吗?
允许的字符是(至少)AZ,az,0-9,ö,Ö,ä,ä,å,Å和德语,拉脱维亚语,爱沙尼亚语(如果有的话)特殊字符?有现成的方法还是我必须制作黑名单(非允许的字符)和正则表达式IsMatch?如果没有现成的如何使用黑名单?
没找到怎么做.我发现的或多或少就是这个(http://blog.stevex.net/string-formatting-in-csharp/):
除了它的对齐之外,字符串中确实没有任何格式.对齐适用于在String.Format调用中打印的任何参数.样本生成
String.Format(“->{1,10}<-”, “Hello”); // gives "-> Hello<-" (left padded to 10)
String.Format(“->{1,-10}<-”, “Hello”); // gives "->Hello <-" (right padded to 10)
Run Code Online (Sandbox Code Playgroud) 我想指定要么fieldname或freetext必须始终存在于适用于此XSD的XML文件中.有没有办法做到这一点?
<xs:complexType name="tSome">
<xs:sequence>
<!-- either one of the two below has to be present. -->
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
<!-- this one below must always be present -->
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud) 我是否正确理解所有线程都在自己的堆栈中具有方法变量的副本,因此从不同的线程调用静态方法时不会出现问题?
我正在实现一个包含许多关键值的项目的WPF DataGrid.项目按项目类别分组.
对于每个类别,应该有:
这些行应始终位于每个组的顶部(排序过滤).
我的第一个解决方案是将这些数据放在组头中.这不是一个好的解决方案,因为组头不支持列.即它应该通过获得列宽来构造.
这可以做到,但当用户想要重新排序和隐藏列时,它会变得复杂.
DataGrid使用的是CollectionViewSource,因此它没有填充C#代码.基本上我正在扩展这个例子:http://msdn.microsoft.com/en-us/library/ff407126.aspx
谢谢和最诚挚的问候 - matti
c# ×9
string ×2
asp.net ×1
atomicity ×1
concurrency ×1
datagrid ×1
enums ×1
regex ×1
service ×1
transactions ×1
volatility ×1
wpf ×1
wpfdatagrid ×1
xsd ×1