是否有一个C#等同于Java的CountDownLatch?
MSDN说System.Windows.Application的公共静态成员是线程安全的.但是当我尝试使用多个线程运行我的应用程序时,我得到以下异常:
ArgumentException: An entry with the same key already exists.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.SortedList`2.Add(TKey key, TValue value)
at System.IO.Packaging.Package.AddIfNoPrefixCollisionDetected(ValidatedPartUri partUri,
PackagePart part)
at System.IO.Packaging.Package.GetPartHelper(Uri partUri)
at System.IO.Packaging.Package.GetPart(Uri partUri)
at System.Windows.Application.GetResourceOrContentPart(Uri uri)
at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean
bSkipJournaledProperties)
at System.Windows.Application.LoadComponent(Uri resourceLocator)
Run Code Online (Sandbox Code Playgroud)
以下调用发生异常:
genericResources = (ResourceDictionary)Application.LoadComponent(new Uri("/Themes/Generic.xaml", UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)
该应用程序在单个线程上工作正常,甚至在两个或三个上.当我从5点起床后,每次都会收到错误.难道我做错了什么?我该怎么做才能解决这个问题?
我已经编写了一个测试,我认为应该是一个有效的死锁案例.看来,一旦lock已经被一个类的实例获取,该实例就不再需要重新获取lock,即使我明确地尝试再次调用另一个方法lock.
这是班级:
internal class Tester
{
private readonly object _sync = new object();
public Tester() { }
public void TestLock()
{
lock (_sync)
{
for (int i = 0; i < 10; i++)
{
Deadlock(i);
}
}
}
private void Deadlock(int i)
{
lock (_sync)
{
Trace.WriteLine(i + " no deadlock!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
0没有死锁!
1没有死锁!
2没有死锁!
3没有死锁!
4没有死锁!
5没有死锁!
6没有死锁!
7没有死锁!
8没有死锁!
9没有死锁!
我本以为这会导致僵局......任何人都能对此有所了解吗?
假设我有以下代码:
private void UpdateDB(QuoteDataSet dataSet, Strint tableName)
{
using(SQLiteConnection conn = new SQLiteConnection(_connectionString))
{
conn.Open();
using (SQLiteTransaction transaction = conn.BeginTransaction())
{
using (SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM " + tableName, conn))
{
using (SQLiteDataAdapter sqliteAdapter = new SQLiteDataAdapter())
{
sqliteAdapter.Update(dataSet, tableName);
}
}
transaction.Commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
C#文档声明,通过using语句,范围内的对象将被处理,并且我已经看到了几个建议我们不需要使用try/finally子句的地方.
我通常用try/finally包围我的连接,并且我总是关闭finally子句中的连接.鉴于上述代码,如果存在异常,假设连接将被关闭是否合理?
我正在尝试调用OpenThemeData(参见msdn OpenThemeData)函数,但我无法确定pszClassList参数传递的可接受的类名是什么.
HTHEME OpenThemeData(
HWND hwnd,
LPCWSTR pszClassList
);
Run Code Online (Sandbox Code Playgroud)
有谁能告诉我可以传递给该参数的可接受的类名是什么?谢谢!
我试图了解返回const引用是否有任何好处.我有一个通常看起来像这样的阶乘函数:
unsigned long factorial(unsigned long n)
{
return (n == 0) ? 1 : n * factorial(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
我假设当我们通过const引用传递并且返回const引用时会有性能提升......但是 - const正确性总是让我感到困惑.
const unsigned long & factorial(const unsigned long& n)
{
return (n == 0) ? 1 : n * factorial(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
返回const引用是否有效?还有,有人可以告诉我:这有益吗?
我正在尝试以编程方式启动应用程序,但它始终在我的应用程序的文件夹中运行...例如:
如果我的应用程序位于C:\ MyApp\myapp.exe而其他应用程序位于C:\ OtherApp\otherapp.exe中,如何在其所在的文件夹中启动其他应用程序,而不是在其中的文件夹中我的应用程序驻留?
以下是我启动其他应用的方法:
private void StartApp(OtherApp application)
{
Process process = new Process();
process.StartInfo.FileName = application.FileName;
process.StartInfo.Arguments = application.AppName;
process.Start();
}
Run Code Online (Sandbox Code Playgroud) 我有一个事件委托,定义如下:
public delegate void CallbackDelegate(Data data);
public event CallbackDelegate OnDataComplete;
Run Code Online (Sandbox Code Playgroud)
我以异步方式引发事件:
// Raise the OnDataComplete event
OnDataComplete.BeginInvoke(new Data(), null, null);
Run Code Online (Sandbox Code Playgroud)
随后,签名BeginInvoke看起来像:
IAsyncResult CallbackDelegate.BeginInvoke(Data data, AsyncCallback callback, object @object)
Run Code Online (Sandbox Code Playgroud)
在我看到的大多数示例中都BeginInvoke使用@object参数调用null,但是我找不到解释该参数用途的文档.
那么该参数的目的是什么?我们可以用它做什么?
我正在尝试确定当用户将Windows字体大小从正常字体更改为超大字体时如何检测,通过在Windows XP计算机上执行以下步骤来选择字体大小:
我的理解是字体大小的变化会导致DPI的变化,所以这是我到目前为止所尝试的.
我想检测Windows字体大小何时从正常变为大或超大字体,并根据字体大小更改采取一些操作.我假设当Windows字体大小改变时,DPI也会改变(特别是当大小为超大字体时)
我收到几条消息,包括:WM_SETTINGCHANGE,WM_NCCALCSIZE,WM_NCPAINT等......但是当字体大小改变时,这些消息都不是唯一的,换句话说,当我收到WM_SETTINGSCHANGE消息时,我想知道改变了什么.
理论上,当我定义OnSettingChange并且Windows调用它时,lpszSection应该告诉我更改的部分是什么,并且工作正常,但是我通过调用SystemParametersInfo检查给定的部分并且我传递了动作SPI_GETNONCLIENTMETRICS,然后我逐步完成调试器和我确保我在返回的NONCLIENTMETRICS中观察任何字体更改的数据,但没有发生.
即使这不起作用,我仍然可以在设置更改时检查DPI.我真的不在乎其他细节,每次我收到WM_SETTINGCHANGE消息,我只会检查DPI并执行我感兴趣的操作,但我也无法获得系统DPI.
我试图通过调用方法GetSystemMetrics来获取DPI,也为每个DC:
Dekstop DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY窗口DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY当前DC-> GetDeviceCaps LOGPIXELSX/LOGPIXELSY
即使我在图形属性窗口中更改DPI,这些值也不会返回任何不同的值,它们总是显示96.
有人能帮我解决这个问题吗?我应该寻找什么?我应该在哪里看?
afx_msg void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
int windowDPI = 0;
int deviceDPI = 0;
int systemDPI = 0;
int desktopDPI = 0;
int dpi_00_X = 0;
int dpi_01_X = 0;
int dpi_02_X = 0;
int dpi_03_X = 0;
CDC* windowDC = CWnd::GetWindowDC(); // try with window DC
HDC desktop = ::GetDC(NULL); // try with …Run Code Online (Sandbox Code Playgroud) 我正在讨论Sanderson的Pro ASP.NET MVC框架,在第4章他讨论了创建一个自定义控制器工厂,似乎现在不推荐使用原始方法,AddComponentLifeStyle或AddComponentWithLifeStyle用于注册控制器:
public class WindsorControllerFactory : DefaultControllerFactory
{
IWindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
// register all the controller types as transient
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
//[Obsolete("Use Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle)) instead.")]
//IWindsorContainer AddComponentLifeStyle<I, T>(string key, LifestyleType lifestyle) where T : class;
foreach (Type t in controllerTypes)
{
container.Register(Component.For<IController>().ImplementedBy<???>().Named(t.FullName).LifeStyle.Is(LifestyleType.Transient));
}
}
// Constructs the controller instance needed to service each request
protected override IController …Run Code Online (Sandbox Code Playgroud) c# ×6
c++ ×3
mfc ×2
winapi ×2
.net ×1
asp.net-mvc ×1
begininvoke ×1
concurrency ×1
deadlock ×1
delegates ×1
directory ×1
events ×1
exception ×1
executable ×1
font-size ×1
msdn ×1
process ×1
reference ×1
reflection ×1
system-font ×1
themes ×1
using ×1
wpf ×1