我使用WPF互操作性来在WinForms表单中托管WPF用户控件.一切正常,除了丑陋的文字渲染:
<Label Content="Normal text" Name="labelNormal"/>
<Label Content="Bold text" Name="labelBold" FontWeight="Bold" />
Run Code Online (Sandbox Code Playgroud)
- 这是WPF窗口上的简单标签:
WPF窗口http://img525.imageshack.us/img525/7049/wpfwindow.png
- 以及在WinForms中托管WPF用户控件时显示的相同标签:
WPF Interop http://i51.tinypic.com/14j4xnc.jpg
Interop变体是完全不同的:intercharacter间隔为零,文本看起来更纯粹的WPF变体.当普通文本可以接受时,粗体文本很难看.
有什么想法如何修复它?
先感谢您!
MSDN以及许多其他来源声称线程池中的工作线程始终是后台.
"线程池线程是后台线程." (MSDN)
"汇集的线程总是后台线程." (在C#中穿线,Joseph Albahari)
我可以通过设置轻松地使工作线程非背景
Thread.CurrentThread.IsBackground = false;
Run Code Online (Sandbox Code Playgroud)
应用程序将等待线程完成.
这有什么问题?
我有2个类feed_Auto和具有多个匹配属性的Product.对于这个特殊问题,AutoID是我需要使用的唯一字段.
我有List<FeedsAuto>几百个独特的条目.我有一个小List<Product>的10,20个独特的条目.我现在想要从大列表中删除小列表中的所有项目.
如何使用RemoveAll({lambda expression})来完成此任务?我发现的所有示例都取决于通用列表是简单类型(字符串,整数等).
private static int DoInserts(ref List<Model.feeds_Auto> source, ref List<Model.Product> target, Guid companyID)
{
List<Model.Product> newProductList = new List<Model.Product>();
List<Model.Product> dropSourceList = new List<Model.Product>();
using (var db = Helpers.GetProdDB())
{
foreach (var src in source)
{
var tgt = target.Where(a => a.alternateProductID == src.AutoID && a.LastFeedUpdate < src.DateModified).FirstOrDefault();
if (tgt == null)
{
newProductList.Add(new Model.Product{...});
dropSourceList.Add(src);
}
}
db.SaveChanges();
if (dropSourceList.Count > 0)
{
source.RemoveAll(????);
} …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么System.String是密封的?
我知道,我可以做任何我不需要继承的事情,但仍然 - 为什么?
有很多类本质上是具有特定方法和属性的字符串.这些是标识符,电子邮件,名称等.
面向对象的设计建议将功能封装在特定的类中.在这里,我们有一种奇怪的情况,即最流行的对象框架中最可用的基本类型是不可扩展的.
谢谢.
编辑.
关于不变性的评论.很容易在私有方法中隐藏所有与状态相关的东西,并允许子类具有对类数据的只读访问权限.
// Safe inheritable immutable string (pseudocode).
class String
{
// Private state
private byte[] state;
private void EditState(byte[]) {}
// Protected read-only access to state
protected byte getReadOnlyData() {}
// Available to child classes overridable methods.
protected virtual getHashCode() {}
protected virtual xxx() {}
}
Run Code Online (Sandbox Code Playgroud)
事实上,实际应用程序中的大多数对象都是字符串.所有这些连续出版物,ASIN,IMEI等,以及名称,评论,都是其性质的字符串.我们将它们作为数据库中的字符串,或者在网页上的文本框中键入字符串,或者通过条形码扫描仪等进行封装.
拥有特定功能的字符串,而不是发明多个类,或多或少做同样的事情,这将是非常好,更安全,更优雅.
曾几何时,远在遥远的星系中,我见证了几位开发者之间的讨论.主题是,如果给最终用户访问生产SQL服务器(MS SQL 2008)是个好主意,以便让他们能够根据自己的数据制作自己的报告.
这是商界人士的要求 - "我们的客户希望制作自定义报告".
提出这个问题的人声称:
其他反对此声称的人声称:
您如何看待最终用户访问SQL?
先感谢您!
很多时候,我看到那里的语言的关键字与完整的类型名称进行替换源代码:
System.String,System.Int32,System.GUID等.
此外,执行此操作的人在任何地方都写出完整的类型名称,使得源代码充满了这样的声明:
System.Collections.Generic.List<System.Reflection.PropertyInfo> list = System.Collections.Generic.List<System.Reflection.PropertyInfo>(newSystem.Reflection.PropertyInfo[] { ... });
Run Code Online (Sandbox Code Playgroud)
当我问他们为什么这样做时,我得到了广泛的答案:"这有助于我避免类型名称冲突","它看起来更专业","我的VS插件自动为我做"等.
据我所知,using如果在整个源代码文件中使用类型一次,有时编写完整类型名称可以帮助您避免编写不必要的内容.有时您需要明确声明一个类型,一个很好的例子是Threading Timer和WinForms Timer.
但是如果你完整的数据库调用来源而你仍然在编写System.Data.SqlClient.SqlCommand而不是'SqlCommand',那对我来说看起来有点奇怪.
你怎么看?我是对的还是我只是不明白的东西?
谢谢!
PS而另一种现象是写作if (0 != variable而不是if (variable != 0).
我有一个应该紧凑的WPF应用程序,可能的内存占用量最小.从流程,几页和网格的角度来看,GUI很简单,但从图形,动画等角度来看,它非常丰富.
我有使用Prism编写应用程序的经验,我非常喜欢它.但它对于简单的任务看起来太沉重了.它不是LOB应用程序,但我仍然需要可测试性,GUI /流程/业务分离等.
我应该使用MVVM吗?
我不确定在尝试最小化应用程序的内存使用时,是否应该担心使用MVVM设计模式的开销.
c# ×5
.net ×4
wpf ×2
collections ×1
elementhost ×1
generics ×1
lambda ×1
mvvm ×1
prism ×1
reporting ×1
security ×1
sql ×1
sql-server ×1
threadpool ×1