我有一个关于我应该在Windows窗体应用程序上使用的后台线程实现的选择的风格问题.目前我BackgroundWorker
在一个具有无限(while(true))
循环的表单上.在这个循环中,我WaitHandle.WaitAny
用来保持线程打盹直到感兴趣的事情发生.我等待的一个事件句柄是一个" StopThread
"事件,这样我就可以摆脱循环.来自我被覆盖的事件会发出此事件的信号Form.Dispose()
.
我读到的某个地方BackgroundWorker
真的是用于那些你不想将UI绑定到并且具有有限结束的操作 - 比如下载文件或处理一系列项目.在这种情况下,"结束"是未知的,并且仅在窗口关闭时.因此,使用后台线程而不是BackgroundWorker
为此目的更合适吗?
对于我所拥有的各种代码,我厌倦了这样的代码块:
if (dict.ContainsKey[key]) {
dict[key] = value;
}
else {
dict.Add(key,value);
}
Run Code Online (Sandbox Code Playgroud)
和查找(即键 - >值列表)
if (lookup.ContainsKey[key]) {
lookup[key].Add(value);
}
else {
lookup.Add(new List<valuetype>);
lookup[key].Add(value);
}
Run Code Online (Sandbox Code Playgroud)
是否存在另一个集合库或扩展方法,无论键和值类型是什么,我都应该在一行代码中执行此操作?
例如
dict.AddOrUpdate(key,value)
lookup.AddOrUpdate(key,value)
Run Code Online (Sandbox Code Playgroud) 我希望能够在List中存储各种静态方法,然后查找它们并动态调用它们.
每个静态方法都有不同数量的args,类型和返回值
static int X(int,int)....
static string Y(int,int,string)
Run Code Online (Sandbox Code Playgroud)
我想要一个List,我可以将它们全部添加到:
List<dynamic> list
list.Add(X);
list.Add(Y);
Run Code Online (Sandbox Code Playgroud)
然后:
dynamic result = list[0](1,2);
dynamic result2 = list[1](5,10,"hello")
Run Code Online (Sandbox Code Playgroud)
如何在C#4中做到这一点?
我有一个类,内部只是一个整数数组.一旦构造,阵列永远不会改变.我想预先计算一个好的哈希码,以便这个类可以非常有效地用作词典中的键.数组的长度小于约30项,并且整数通常在-1000和1000之间.
我在一个较大的C#项目的一小部分内使用DLR,IronPython是有问题的语言.
对于系统的某些部分,用户可以输入一个小脚本来自定义它们的行为.我想做的是能够限制它们使用无副作用的纯函数或在某种沙盒中使它们的功能不能触及外面的任何东西.
此外,用户只能输入一个函数体,函数头和参数规范在传递给Python DLR引擎之前会自动在代码中预先设置,以便调用它的系统的C#端确切地知道要传递的args和什么回来了.用户只需要完全基于作为参数提供的值进行简单的操作和测试.
例如
还行吧: return (a * 100) > b;
这不行: delete_file_system(); return (a * 100) > b;
怎么可能实现这一目标?有更合适的语言或技术选择吗?
我正在使用.NET(C#).
如果我有两个线程运行T1和T2,T1是这样的:
while (true)
{
dosomething(); //this is a very fast operation
sleep(5 seconds);
}
Run Code Online (Sandbox Code Playgroud)
同时T2正在做一些完全不同的事情,但有时它需要给T1一个踢,这样即使睡眠时间不到,它也会从睡眠中醒来.我该怎么做呢?
有没有办法在.NET(或某种标准扩展方法)中提出枚举问题?
例如,当前项是枚举中的第一个或最后一个项:
string s = "";
foreach (var person in PeopleListEnumerator) {
if (PeopleListEnumerator.IsFirstItem) s += "[";
s += person.ToString();
if (!PeopleListEnumerator.IsLastItem) s += ",";
else s += "]";
}
Run Code Online (Sandbox Code Playgroud) 我想将RabbitMQ设置为具有HA的两个(或更多)节点集群.
使用案例:客户端生产者应用程序(C#.NET)知道群集有两个节点并发布到群集.各种消费者应用程序(也称为C#.NET)连接到群集并获取生产者生成的所有消息.只要至少有一个节点启动并运行生产者,消费者就会继续工作而不会出错.假设节点A和B正在运行而B死了一段时间,然后重新启动,然后一段时间A死亡,客户端都继续运行而没有收到错误,因为在任何时候至少有一个节点启动.
是否可以开箱即用?
对于Windows/.NET应用程序环境,是否有更适合(商业上可行)的其他MQ?
.net ×5
c# ×4
algorithm ×1
arrays ×1
c#-4.0 ×1
collections ×1
dynamic ×1
enumeration ×1
enumerator ×1
hashcode ×1
ironpython ×1
rabbitmq ×1
sleep ×1
winforms ×1