小编Pie*_*kel的帖子

.NET有图标集吗?

.NET框架是否有一组用于Windows窗体或WPF应用程序的图标?如何使用它?例如,如何将其用作应用程序窗口图标?

我记得,如果你想显示一个消息框,可以选择显示不同的图标,我想框架中有更多的图标?

.net wpf icons winforms

52
推荐指数
4
解决办法
7万
查看次数

C#.NET的区间数据类型?

我正在寻找.NET 4.0 的间隔数据类型.例如,间隔(a,b),所有点x使得a <x <= b.

我希望能够做的是创建具有以下特性的间隔:

  • 封闭和开放的
  • 无限的间隔,完全无界,右/左无界.

有了这些,我想做的事情如下:

  • 检查点是否在某个区间内.
  • 检查两个间隔是否重叠.
  • 将两个重叠间隔合并为一个间隔.
  • 检查间隔集合是否包含单个间隔.
  • 等等:)

如果我能同时处理数值数据类型和日期时间会很好.

我知道逻辑非常简单,但我认为没有理由认为我是第一个需要这样做的人.

.net c# types

23
推荐指数
5
解决办法
2万
查看次数

从异步中捕获未处理的异常

async等待的方法抛出异常时,异常存储在某处并且抛出它会被延迟.在WinForms或WPF应用程序中,它用于SynchronizationContext.Current发布抛出异常.但是,在例如控制台应用程序中,它会在线程池上抛出异常并关闭应用程序.

如何防止async方法抛出的异常导致应用程序崩溃?

编辑:

我正在描述的问题显然是因为我有void async方法.看评论.

.net c# unhandled-exception async-await

21
推荐指数
2
解决办法
1万
查看次数

这怎么可能:在WaitOne中处理OnPaint

我有一个ManualResetEvent.有一次,我等着那个事件WaitOne.令我惊讶的是,我OnPaint在演出期间收到了一个活动WaitOne.这种情况经常发生.

堆栈跟踪如下所示:

替代文字

我知道a WaitOne会阻塞当前线程,并且在事件触发之前不允许执行任何其他代码.

有人可以解释这里发生了什么吗

.net c# events winforms

19
推荐指数
1
解决办法
1881
查看次数

C#通过HTTP发送图像

我有一个用C#编写的小型HTTP服务器,直到现在我只需要将原始文本发送回发件人.但现在我必须发送一个JPG-Image,我不知道如何.

这就是我现在拥有的:

// Read the HTTP Request
Byte[] bReceive = new Byte[MAXBUFFERSIZE];
int i = socket.Receive(bReceive, bReceive.Length, 0);

//Convert Byte to String
string sBuffer = Encoding.ASCII.GetString(bReceive);

// Look for HTTP request
iStartPos = sBuffer.IndexOf("HTTP", 1);

// Extract the Command without GET_/ at the beginning and _HTTP at the end
sRequest = sBuffer.Substring(5, iStartPos - 1 - 5);
String answer = handleRequest(sRequest);


// Send the response
socket.Send(Encoding.UTF8.GetBytes(answer));
Run Code Online (Sandbox Code Playgroud)

我想我必须做一些文件流而不是字符串,但我真的没有胶水..

c# tcplistener image http send

15
推荐指数
1
解决办法
1万
查看次数

按住鼠标按钮时C#如何循环

你能为我指出正确的方向吗?我正试图在按下表单按钮时触发循环.

//pseudocode
While (button1 is pressed)
value1 += 1
Run Code Online (Sandbox Code Playgroud)

当然,当释放按钮时停止循环

c# events mouseevent

14
推荐指数
3
解决办法
4万
查看次数

部分类型推断

我有这样的通用方法(简化版):

public static TResult PartialInference<T, TResult>(Func<T, TResult> action, object param)
{
    return action((T)param);
}
Run Code Online (Sandbox Code Playgroud)

在上面,paramobject故意的类型.这是要求的一部分.

当我填写类型时,我可以这样称呼它:

var test1 = PartialInference<string, bool>(
    p => p.EndsWith("!"), "Hello world!"
);
Run Code Online (Sandbox Code Playgroud)

但是,我想使用类型推断.最好,我想写这个:

var test2 = PartialInference<string>(
    p => p.EndsWith("!"), "Hello world!"
);
Run Code Online (Sandbox Code Playgroud)

但这不编译.我想出的最好的是:

var test3 = PartialInference(
    (string p) => p.EndsWith("!"), "Hello world!"
);
Run Code Online (Sandbox Code Playgroud)

我希望将此作为类型参数并且仍具有正确类型的返回类型的原因是因为我的实际调用看起来像这样:

var list1 = ComponentProvider.Perform(
    (ITruckSchedule_StaffRepository p) => p.GetAllForTruckSchedule(this)
)
Run Code Online (Sandbox Code Playgroud)

哪个非常难看,我很乐意写这样的东西:

var list2 = ComponentProvider.Perform<ITruckSchedule_StaffRepository>(
    p => p.GetAllForTruckSchedule(this)
)
Run Code Online (Sandbox Code Playgroud)

c# generics

13
推荐指数
1
解决办法
1436
查看次数

有人可以在测试驱动开发中解释"假它直到你做到"的方法吗?

当你采取"假装直到你制造IT"TDD方法时,我有一个问题需要理解代码的演变.

好吧,你假装它,假设你返回一个常数,这样破损的测试在开始时是绿色的.然后你重新考虑了你的代码.然后你运行相同的测试,显然会因为你伪造了它!

但如果测试通过,你怎么能依赖它,特别是当你知道你伪造了那个?

如何通过真实的代码重构来重构伪造的测试,以便它仍然可靠?

谢谢

.net c# tdd nunit unit-testing

13
推荐指数
3
解决办法
1761
查看次数

修复COM引用:类型库导入程序无法转换成员DISPPARAMS.rgvarg的签名

我有一个构建服务器,我在其中构建一个Visual Studio扩展.我最近迁移到另一台服务器,现在我收到以下警告:

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1988,5):警告MSB3305:从路径"C:\ Windows\SysWOW64\stdole2.tlb"处理COM引用"".类型库导入程序无法转换成员'DISPPARAMS.rgvarg'的签名.C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1988,5):警告MSB3305:从路径"C:\ Windows\SysWOW64\stdole2.tlb"处理COM引用"".类型库导入程序无法转换成员'DISPPARAMS.rgdispidNamedArgs'的签名.

此新服务器与先前服务器之间的主要区别在于先前的服务器安装了隔离Shell(Microsoft Visual Studio Management Studio).我想我错过了服务器注册,但我不知道哪个.

msbuild visual-studio-sdk

13
推荐指数
1
解决办法
2744
查看次数

lock语句如何确保内部处理器同步?

我有一个小的测试应用程序,它同时执行两个线程.一个递增a static long _value,另一个递减a.我已经确保ProcessThread.ProcessorAffinity线程与不同的物理(无HT)内核相关联以强制进行内部处理器通信,并确保它们在执行时间内重叠了很长时间.

当然,以下不会导致零:

for (long i = 0; i < 10000000; i++)
{
    _value += offset;
}
Run Code Online (Sandbox Code Playgroud)

因此,合乎逻辑的结论是:

for (long i = 0; i < 10000000; i++)
{
    Interlocked.Add(ref _value, offset);
}
Run Code Online (Sandbox Code Playgroud)

这当然导致零.

但是,以下内容也会导致零:

for (long i = 0; i < 10000000; i++)
{
    lock (_syncRoot)
    {
        _value += offset;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,该lock语句确保读取和写入不会重新排序,因为它使用了完整的栅栏.但是,我找不到任何有关处理器缓存同步的信息.如果没有任何缓存同步,我认为在两个线程完成后我应该看到偏离0?

有人可以向我解释如何lock/ Monitor.Enter/Exit确保处理器缓存(L1/L2缓存)是同步的吗?

.net c# multithreading synchronization

10
推荐指数
1
解决办法
847
查看次数