当我使用Visual Studio运行我的应用程序时,我总是得到一个DisconnectedContext(一个托管调试助手).鉴于Google和docs,当从其他线程调用STA上的COM对象时,可能会发生这种情况.
但是,当我看到弹出窗口中的所有线程时,我找不到这样的东西.(而且我没有发现任何奇怪的东西).
关于如何找到DisconnectedContext的方式的一些想法?
我怎么能等待n个脉冲?
… // do something
waiter.WaitForNotifications();
Run Code Online (Sandbox Code Playgroud)
我希望上面的线程等到被通知n次(由n个不同的线程或n次由同一个线程).
我相信有一种计数器可以做到这一点,但我找不到它.
我想知道当天的指定时间是否过去了.我真的不喜欢我的方式:
private static readonly TimeSpan _whenTimeIsOver = new TimeSpan(16,25,00);
internal static bool IsTimeOver()
{
return DateTime.Now.TimeOfDay.Subtract(_whenTimeIsOver ).Ticks > 0;
}
Run Code Online (Sandbox Code Playgroud)
你好吗?
所有这一切都在问题中,我Type.GetType("System.String[*]")在一些代码中,我不知道这种类型是什么,并且无法真正找到关于数组内这个星的任何信息.
关键词与此相关的是什么?
是否
foreach(T value in new List<T>(oldList) )
Run Code Online (Sandbox Code Playgroud)
当oldList包含1百万个对象T时危险(代价高昂)?
更常见的是,在枚举期间添加/删除元素时,枚举oldList的最佳方法是什么?
我创建了自己的用户控件,它只包含一个面板:
当我在设计器中拖动myPanel对象然后尝试在其上添加一个按钮时,该按钮实际上被添加到窗体的控件中.
我必须设置一个属性/属性才能执行此操作,另一种方法可以执行我想要的操作吗?
public class MyPanel : UserControl
{
private Panel panelMain;
public MyPanel()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.panelMain = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// panelMain
//
this.panelMain.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelMain.Location = new System.Drawing.Point(0, 0);
this.panelMain.Name = "panelMain";
this.panelMain.Size = new System.Drawing.Size(150, 150);
this.panelMain.TabIndex = 0;
//
// myPanel
//
this.Controls.Add(this.panelMain);
this.Name = "MyPanel";
this.ResumeLayout(false);
}
}
Run Code Online (Sandbox Code Playgroud) 当我们在使用直接数据库访问或使用Web服务之间进行选择时,有哪些优点和缺点?
对于应该响应的关键应用程序(<0.5秒)以及对此Web服务/数据库的低调用(NB:Web服务将由另一个团队维护),您会选择什么?
我有一个生产者/消费者流程.消费对象具有ID属性(类型为整数),我想一次只消耗一个具有相同ID的对象.我怎么能这样做?
也许我可以做这样的事情,但我不喜欢它(创造了太多的对象,而每天只有一两个具有相同ID的消息可以被消耗而且锁(_lockers)有点耗费时间:
private readonly Dictionary<int,object> _lockers = new Dictionary<int,object>();
private object GetLocker(int id)
{
lock(_lockers)
{
if(!_lockers.ContainsKey(id))
_lockers.Add(id,new object());
return _lockers[id];
}
}
private void Consume(T notif)
{
lock(GetLocker(notif.ID))
{
...
}
}
enter code here
Run Code Online (Sandbox Code Playgroud)
注意:同样的问题,ID属性是string类型(在那个cas中我可以锁定string.Internal(currentObject.ID)
我有几个Expression<Func<User,bool>>共享属性的表达式.例如,
Expression<Func<User, bool>> e1 =
(User u) => u.IsActive && u.Group != "PROCESS" && u.Name != null;
Expression<Func<User, bool>> e2 =
(User u) => u.IsActive && u.Group != "PROCESS" && u.Name != "A";
Expression<Func<User, bool>> e3 =
(User u) => u.IsActive && u.Group != "PROCESS" && u.Name != "B";
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以将u.IsActive && u.Group != "PROCESS"变量放入e1,e2和e3中?编辑:我仍然想要同一棵树.
似乎我可以通过使用Expression.Lambda<Func<User, bool>>(BinaryExpression.AndAlso(etc 构建表达式来实现它...但是它不是简化我的代码而是使它更难以阅读.
以下请求是否自动"优化"?
var result = initial
.Where(Predicate1)
.Where(Predicate2)
.Where(Predicate3);
Run Code Online (Sandbox Code Playgroud)
这相当于
var result = initial
.Where(e => Predicate1(e) && Predicate2(e) && Predicate3(e));
Run Code Online (Sandbox Code Playgroud)
这两个陈述中哪一个更优化了两个?还是他们一模一样?
c# ×9
.net ×1
collections ×1
database ×1
datetime ×1
debugging ×1
enumeration ×1
lambda ×1
linq ×1
locking ×1
performance ×1
timespan ×1
web-services ×1
where ×1
winforms ×1