我开始用C#代码示例在这里.我试图调整它有几个原因:1)在我的场景中,所有任务将在消费者开始之前预先放入队列中; 2)我想将工作者抽象为一个单独的类而不是班上的原始Thread成员WorkerQueue.
我的队列似乎并没有自行处理,它只是挂起,当我在Visual Studio中打破时,它就停留在#1 _th.Join()线上WorkerThread.另外,有更好的方法来组织这个吗?暴露WaitOne()和Join()方法的东西似乎是错误的,但我想不出一个让WorkerThread队列进行交互的合适方法.
另外,如果我q.Start(#)在using块的顶部调用,则每次启动时只有一些线程(例如,线程1,2和8处理每个任务).为什么是这样?这是某种竞争条件,还是我做错了什么?
using System;
using System.Collections.Generic;
using System.Text;
using System.Messaging;
using System.Threading;
using System.Linq;
namespace QueueTest
{
class Program
{
static void Main(string[] args)
{
using (WorkQueue q = new WorkQueue())
{
q.Finished += new Action(delegate { Console.WriteLine("All jobs finished"); });
Random r = new Random();
foreach (int i in Enumerable.Range(1, 10))
q.Enqueue(r.Next(100, 500));
Console.WriteLine("All jobs queued"); …Run Code Online (Sandbox Code Playgroud) 我在VB.NET中制作一个程序,需要在文本框中隐藏Caret.
我可以忍受它完全隐藏或与文本框背景颜色相同的颜色.我该怎么做呢?如果可能的话,我宁愿远离自定义控件.
谢谢
读取MSDN,浮点范围从1E-45到1E38,双倍范围从1E-324到1E308,我想知道为什么它对于负指针和正指数是不对称的?
请考虑我拥有的Active Directory服务中的以下代码段.在该Rename()方法中,它始终抛出ObjectDisposedException" 无法访问已处置的对象.对象名称:'DirectoryEntry'. "
这曾经工作得很好,但我也有一个Add()方法,两个是95%完全相同的代码.所以,我选择了SetIdentity()传递主体和属性字典的方法并从那里开始.该Add()方法有效,但那是因为还没有底层对象可以操作.该Rename()方法失败,因为有一个.
我知道,如果我把代码放SetIdentity()回去,Rename()它会工作得很好,但我不想这样做.
我已经尝试在一个块中包装该using子句,但它没有做任何事情.我试过传递校长和字典,但这也没有帮助.我已经尝试检查是否为null并且它没有帮助.Rename()try/catchrefDirectoryEntry
所以,我猜它不能是using条款中的代码失败.我还应该寻找什么?
使用Visual Studio进行调试时,我可以将鼠标悬停在对象上,它就在那里并完成属性和值,所以我不知道我应该在哪里寻找......
public override void Rename(
UserPrincipal principal,
IDictionary<string, object> properties) {
if (principal != null) {
this.SetIdentity(ref principal, ref properties);
using (DirectoryEntry entry = (principal.GetUnderlyingObject() as DirectoryEntry)) {
entry.Rename(newName: String.Format("CN={0}", principal.DisplayName));
entry.CommitChanges();
};
principal.Save(); // this is where ASP.NET runtime points to when failed
};
} // …Run Code Online (Sandbox Code Playgroud) 我有一个标签页,其中包含文本框,下拉菜单,复选框,以上所有组框和一些标签.现在我想在用户点击按钮时清除所有控件.我该如何实施呢?我搜索了很多,以为会有一个标准的库方法.我找到的只是一些for-each循环的方法(在组合框中不起作用.)请指导我如何处理这个问题.基本上我想要像Tabpage.load(); 它使标签处于初始状态.如果可能,我想保留特定的文本框.
有谁知道存储来自Windows的MessageBox符号的位置(错误图标,感叹号图标......).我认为他们在.dll文件中!
我正在使用一些使用UDP向我发送字节数组的服务.这个服务应用程序是用C语言开发的 - 这个字节数组是一个C结构.
我知道我可以在C#上重新定义这个结构,并使用StructLayout属性使成员具有相同的对齐方式(我是对的吗?)
但是可以使用托管C++/CLI定义相同的结构并将此托管C++代码导入到我的C#项目中并以此方式进行序列化吗?
如果这是可能的 - 那该怎么做?当我谷歌它时,我找不到任何例子.
我有非托管课程.在那个类中,我有一个托管对象.现在我想在我的unmanged类中为托管对象创建一个pin_ptr.当我尝试这样做时,我收到此错误"错误C3265:无法pinnedProject在非托管中声明托管_ ProjectWrapper如何实现此目的?
这是代码.
class ProjectWrapper
{
private:
msclr::auto_gcroot<Project^> _project; // --> This works fine,
pin_ptr<msclr::auto_gcroot<Project^>> _pinnedProject; // ---> This gives error
public:
ProjectWrapper()
{
_project = gcnew Project();
pin_ptr<msclr::auto_gcroot<Project^>> anotherPinnedProject = &_project; // --> This one works,
//_pinnedProject = _project; // --> I want to use this instead of above live,
}
}
Run Code Online (Sandbox Code Playgroud) 我想测试按位运算是否真的比算术运算更快.我以为他们是.
我写了一个小的C程序来测试这个假设,令我惊讶的是,加法平均比按位AND运算少.这对我来说是令人惊讶的,我无法理解为什么会这样.
根据我所知的附加,来自较低有效位的进位应该被携带到下一位,因为结果也取决于进位.对我来说逻辑运算符比加法更慢是没有意义的.
我的鳕鱼在下面:
#include<stdio.h>
#include<time.h>
int main()
{
int x=10;
int y=25;
int z=x+y;
printf("Sum of x+y = %i", z);
time_t start = clock();
for(int i=0;i<100000;i++)z=x+y;
time_t stop = clock();
printf("\n\nArithmetic instructions take: %d",stop-start);
start = clock();
for(int i=0;i<100000;i++)z=x&y;
stop = clock();
printf("\n\nLogic instructions take: %d",stop-start);
}
Run Code Online (Sandbox Code Playgroud)
一些结果:
Arithmetic instructions take: 327
Logic instructions take: 360
Arithmetic instructions take: 271
Logic instructions take: 271
Arithmetic instructions take: 287
Logic instructions take: 294
Arithmetic instructions take: 279
Logic instructions take: …Run Code Online (Sandbox Code Playgroud) c assembly instructions logical-operators integer-arithmetic