小编Har*_*can的帖子

C#5异步/等待线程机制感觉不对?

为什么调用线程会进入异步方法直到内部'await'?

一旦调用异步方法就产生线程不是更清晰.这样你就可以确定async方法立即返回.您不必担心在异步方法的早期阶段不做任何昂贵的事情.

我倾向于想知道一个方法是否会在'my'线程上执行代码.是否阻止.这种模式似乎打开了一系列中间可能性.

设计师比我聪明得多,所以我确信有充分的理由,我只是想了解它.

.net c# asynchronous c#-5.0

11
推荐指数
1
解决办法
1813
查看次数

linqpad和mongodb

可以在MongoDB中使用linqpad吗?或任何其他工具,允许您使用linq在mongo上运行adhoc查询.

我已经尝试使用shell在json中编写查询,但括号,引号,冒号让我绝对疯狂.

如果没有工具,我将使用c#编写查询并编译/运行.

.net linq linqpad mongodb

11
推荐指数
2
解决办法
5215
查看次数

防火墙阻止端口80上的非HTTP流量吗?

任何人都可以确认在端口80上使用持久性传出TCP连接不会被绝大多数消费者防火墙阻止吗?

这是基于HTTP在TCP上运行这一事实的假设,但理论上理论上可以分析数据包.问题是大多数消费者防火墙是否这样做?

networking firewall tcp http network-protocols

8
推荐指数
1
解决办法
7307
查看次数

在C#中动态调度派生类

我正在尝试执行以下操作:

public abstract BaseClass {

  public virtual void ReceiveEvent(Event evt)
    {
        ProcessEvent(evt as dynamic);
    }

    private void ProcessEvent(object evt)
    { 
        LogManager.Log(@"Received an event that is not being processed! 
                        Dispatch fallback");
    }
}

public DerivedClass: BaseClass {

    private void ProcessEvent(SpecificEvent evt)
    { 
        LogManager.Log("Processing Event");
    }
}
Run Code Online (Sandbox Code Playgroud)

SpecificEvents命中了回退方法而不是派生类中的方法.我一直在同一个类中使用动态调度,并发现它非常有用/干净.它是否不适用于上面示例中所示的派生类?

编辑: 答案似乎有些混乱.基本上我一直使用以下设计:

public class SomeClass{

    public void DoSomethingDispatcher(SomeObject obj)
    {
        ProcessObject(obj as dynamic);
    }

    private void DoSomething(SomeObjectType1 obj)
    { 

    }

    private void DoSomething(SomeObjectType2 obj)
    { 

    }

    private void DoSomething(SomeObjectType3 obj)
    { 

    }

    private void …
Run Code Online (Sandbox Code Playgroud)

c# dispatch c#-4.0

8
推荐指数
1
解决办法
1317
查看次数

是否有必要在信号量上调用Dispose?

class myclass 
{
    private Semaphore _sync;

    myclass ()
    {
          _sync = new Semaphore(1,1);
    }

    doasync()
    {
           _sync.WaitOne();
           //do some stuff
           _sync.Release();
    }
}


 somefunctionsomewhere() 
 {
     var myobject = new myclass();    
     //spawn 100 threads that all call myobject.doasync()
 }
Run Code Online (Sandbox Code Playgroud)

以上安全+清洁?当所有100个线程完成异步工作时,两个_sync是否会被释放并收集myclass?

如果没有,知道何时调用_sync.Dispose()的最佳方法是什么?

.net multithreading dispose semaphore

7
推荐指数
1
解决办法
3263
查看次数

生成声音(不是来自文件)

我正在构建一个小型游戏原型,我希望能够播放简单的声音,其长度/音调/音调将根据用户的行为而变化.

这令人惊讶地难以做到.我发现最近的资源是:

http://www.tmroyal.com/playing-sounds-in-swift-audioengine.html

但这实际上并没有在我的设备或iOS模拟器上生成任何声音.

有没有人知道任何工作代码来播放任何程序生成的音频?简单的正弦波会做.

audio ios sprite-kit swift

7
推荐指数
2
解决办法
5586
查看次数

找到矩形位置,使其覆盖2D空间中的最大点

给定具有X点的2D空间,如何有效地找到放置固定大小矩形的位置,以便它覆盖那些X点的最大可能数量?

我需要沿着这些线条在我正在构建的2D游戏中定位视口.

algorithm graphics geometry intersection graphics2d

7
推荐指数
1
解决办法
1572
查看次数

"调用线程必须是STA"解决方法

我知道在这个主题上有一些关于SO的答案,但是我无法让任何解决方案适合我.我试图从一个从datatemplate中发出的ICommand打开一个新窗口.当实例化新窗口时(在"new MessageWindowP"中),以下两者都会出现上述错误:

使用TPL/FromCurrentSynchronizationContext 更新:有效

public class ChatUserCommand : ICommand
{
    public void Execute(object sender)
    {
        if (sender is UserC)
        {
            var user = (UserC)sender;
            var scheduler = TaskScheduler.FromCurrentSynchronizationContext();                  
            Task.Factory.StartNew(new Action<object>(CreateMessageWindow), user,CancellationToken.None, TaskCreationOptions.None,scheduler);         
        }
    }

    private void CreateMessageWindow(object o)
    {
        var user = (UserC)o;
        var messageP = new MessageWindowP();
        messageP.ViewModel.Participants.Add(user);
        messageP.View.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用ThreadStart: 更新:不推荐,请参阅Jon的回答

public class ChatUserCommand : ICommand
{
    public void Execute(object sender)
    {
        if (sender is UserC)
        {
            var user = (UserC)sender;

            var t = new …
Run Code Online (Sandbox Code Playgroud)

wpf multithreading dispatcher sta task-parallel-library

6
推荐指数
3
解决办法
2万
查看次数

GC.Collect() + GC.WaitForPendingFinalizers() 会不会回收所有可回收的内存?

我试图通过在析构函数中使用 console.WriteLine() 来确保释放某个类的实例,但输出从未出现。

我仔细搜索了任何挥之不去的参考资料以及活动订阅,但没有找到。只是为了我自己的理智,在我继续搜索之前,有人可以确认:

GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)

无论对象有多小,都会强制完全回收吗?

.net garbage-collection

6
推荐指数
1
解决办法
3707
查看次数

如何在不读取其完整内容的情况下中止HTTP帖子(.NET REST服务)

我创建了一个自托管的.NET服务,接受二进制上传.

[ServiceContract]
public interface IBinaryService
{

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "up/file/{fileName}/{hash}")]

    void FileUpload(string fileName, string hash, Stream fileStream);
Run Code Online (Sandbox Code Playgroud)

当它收到文件时,它首先检查该文件是否已经在系统上,否则它从客户端流式传输文件并保存:

    public void FileUpload(string fileName, string hash, Stream fileStream)
    {
        string filebasedir = basedir + @"file\"; //" 
        if (File.Exists(filebasedir + hash))
        {

            WebOperationContext.Current.OutgoingResponse.StatusCode = 
                                   System.Net.HttpStatusCode.Conflict;
            return;
        }

        using(var fileToupload = new FileStream(
                string.Concat(filebasedir, hash),
                FileMode.Create))
                {
                fileStream.CopyTo(fileToupload);
                }
Run Code Online (Sandbox Code Playgroud)

如果我单步执行代码,我可以看到文件内容在服务器读取参数并确定是否存在冲突之后才会进行流式处理.我只需要以某种方式强制服务器不读取全部内容(可能是几兆字节).不幸的是,使用'return'提前退出方法不会这样做.

这可能吗?

.net rest wcf post httpwebrequest

5
推荐指数
1
解决办法
609
查看次数