我的WPF应用程序生成的数据集可能每次都有不同的列数.输出中包含将用于应用格式的每列的说明.输出的简化版本可能类似于:
class Data
{
IList<ColumnDescription> ColumnDescriptions { get; set; }
string[][] Rows { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此类在WPF DataGrid上设置为DataContext,但实际上我以编程方式创建列:
for (int i = 0; i < data.ColumnDescriptions.Count; i++)
{
dataGrid.Columns.Add(new DataGridTextColumn
{
Header = data.ColumnDescriptions[i].Name,
Binding = new Binding(string.Format("[{0}]", i))
});
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用XAML文件中的数据绑定替换此代码?
使用ASP.Net MVC 3工具创建新项目时,它将以下应用程序设置添加到Web.config:
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
它有什么作用?
我知道浮点计算存在准确性问题,并且有很多问题可以解释原因.我的问题是,如果我运行两次相同的计算,我是否可以始终依赖它来产生相同的结果?哪些因素可能会影响这个?
我有一个简单的物理模拟,并希望记录会话,以便他们可以重播.如果可以依赖计算,那么我只需要记录初始状态加上任何用户输入,我应该始终能够完全重现最终状态.如果计算不准确,那么在开始时错误可能会在模拟结束时产生巨大影响.
我目前在Silverlight工作,但有兴趣知道这个问题是否可以回答一般.
更新: 初始答案表明是,但显然这并不完全清楚,如所选答案的评论中所述.看起来我将不得不做一些测试,看看会发生什么.
我在C#度过了最近4年,所以我对C++中当前的最佳实践和常见设计模式感兴趣.考虑以下部分示例:
class World
{
public:
void Add(Object *object);
void Remove(Object *object);
void Update();
}
class Fire : Object
{
public:
virtual void Update()
{
if(age > burnTime)
{
world.Remove(this);
delete this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们有一个负责管理一组对象并定期更新它们的世界.火是一种可能在许多不同情况下被添加到世界中的物体,但通常是世界上已有的另一物体.Fire是唯一知道什么时候它已经烧毁的对象,所以目前我已将它自行删除.造成火灾的对象可能不再存在或相关.
这是一件明智的事情还是有更好的设计来帮助清理这些物体?
我正在编写一个多人游戏服务器,我正在研究新的C#async/await功能可以帮助我的方法.服务器的核心是一个循环,它尽可能快地更新游戏中的所有演员:
while (!shutdown)
{
foreach (var actor in actors)
actor.Update();
// Send and receive pending network messages
// Various other system maintenance
}
Run Code Online (Sandbox Code Playgroud)
这个循环需要处理数千个演员并每秒更新多次以保持游戏顺利运行.有些演员偶尔会在更新函数中执行缓慢的任务,例如从数据库中获取数据,这是我想要使用异步的地方.一旦检索到该数据,actor就想要更新游戏状态,这必须在主线程上完成.
由于这是一个控制台应用程序,我计划编写一个SynchronizationContext,它可以将挂起的委托分派给主循环.这允许这些任务在完成后更新游戏,并允许将未处理的异常抛入主循环.我的问题是,如何编写异步更新功能?这非常好用,但打破了不使用async void的建议:
Thing foo;
public override void Update()
{
foo.DoThings();
if (someCondition) {
UpdateAsync();
}
}
async void UpdateAsync()
{
// Get data, but let the server continue in the mean time
var newFoo = await GetFooFromDatabase();
// Now back on the main thread, update game state
this.foo = newFoo;
}
Run Code Online (Sandbox Code Playgroud)
我可以使Update()异步并将任务传播回主循环,但是:
我怎么办这些我无法等待的任务?我唯一想知道他们已经完成的时间是关闭服务器的时候,但是我不想收集可能需要数星期更新的每一项任务.
c# asynchronous synchronizationcontext task-parallel-library async-await
我有一个用C#编写的应用程序,它使用Outlook Interop打开一个新的邮件消息,预先填写用户可以在手动发送之前编辑的详细信息.
var newMail = (Outlook.MailItem)outlookApplication.CreateItem(
Outlook.OlItemType.olMailItem);
newMail.To = "example@exam.ple";
newMail.Subject = "Example";
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
newMail.HTMLBody = "<p>Dear Example,</p><p>Example example.</p>";
newMail.Display(false);
Run Code Online (Sandbox Code Playgroud)
当同一用户手动创建新消息时,字体将设置为Calibri或用户将其设置为默认字体.问题是自动电子邮件中的文本显示在我们不想要的Times New Roman字体中.
如果我查看其中一封已发送的电子邮件的来源,我可以看到Outlook已明确设置电子邮件来源中的字体:
// Automated
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";
}
// Manual
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
}
Run Code Online (Sandbox Code Playgroud)
为什么格式不同,如何让自动电子邮件使用用户默认设置?我正在使用互操作程序集的版本11,因为安装了Outlook 2003和2007的混合.
我正在寻找使以下更简洁的方法.
public class MyTests
{
IPresenter presenter;
[SetUp]
public void SetUp()
{
presenter = MockRepository.GenerateStub<IPresenter>();
}
...
}
Run Code Online (Sandbox Code Playgroud)
特别是在创建模拟时再次指定类型似乎是多余的.例如,我可以这样写它并使用反射来获取类型并自动创建存根:
public class MyTests
{
IPresenter presenter;
[SetUp]
public void SetUp()
{
Stub(x => x.presenter);
}
void Stub(Expression<Func<MyTests, object>> expression)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
这可以工作,但编译器无法再检测到分配了演示者并开始发出警告.这也让ReSharper非常不满意.
有谁能建议更好的方法?
c# ×5
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c++ ×1
data-binding ×1
datagrid ×1
dry ×1
email ×1
interop ×1
math ×1
nunit ×1
oop ×1
outlook ×1
rhino-mocks ×1
silverlight ×1
stylesheet ×1
unit-testing ×1
wpf ×1
xaml ×1