小编phi*_*131的帖子

使用嵌套的Foreach语句迭代多维数组

我认为这可能是一个非常简单的问题,但我还没有弄清楚.如果我有一个像这样的二维数组:

int[,] array = new int[2,3] { {1, 2, 3}, {4, 5, 6} };
Run Code Online (Sandbox Code Playgroud)

使用嵌套的foreach语句迭代数组的每个维度的最佳方法是什么?

c# foreach nested-loops

72
推荐指数
4
解决办法
9万
查看次数

如何从另一个类中运行的另一个线程更新UI

我目前正在编写我的第一个关于C#的程序,而且我对该语言非常陌生(迄今为止只用于C).我做了很多研究,但所有的答案都太笼统了,我根本无法解决问题.

所以这里是我(非常常见)的问题:我有一个WPF应用程序,它从用户填充的几个文本框中获取输入,然后使用它来对它们进行大量计算.它们应该花费大约2-3分钟,所以我想更新进度条和文本块,告诉我当前的状态.此外,我需要存储用户的UI输入并将它们提供给线程,所以我有第三个类,我用它来创建一个对象,并希望将此对象传递给后台线程.显然我会在另一个线程中运行计算,因此UI不会冻结,但我不知道如何更新UI,因为所有计算方法都是另一个类的一部分.经过大量的研究后,我认为最好的方法是使用调度员和TPL,而不是背景工作者,但说实话,我不确定它们是如何工作的,经过大约20个小时的试错和其他答案,我决定问我自己的问题.

这里有一个非常简单的程序结构:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        Initialize Component();
    }

    private void startCalc(object sender, RoutedEventArgs e)
    {
        inputValues input = new inputValues();

        calcClass calculations = new calcClass();

        try
        {
             input.pota = Convert.ToDouble(aVar.Text);
             input.potb = Convert.ToDouble(bVar.Text);
             input.potc = Convert.ToDouble(cVar.Text);
             input.potd = Convert.ToDouble(dVar.Text);
             input.potf = Convert.ToDouble(fVar.Text);
             input.potA = Convert.ToDouble(AVar.Text);
             input.potB = Convert.ToDouble(BVar.Text);
             input.initStart = Convert.ToDouble(initStart.Text);
             input.initEnd = Convert.ToDouble(initEnd.Text);
             input.inita = Convert.ToDouble(inita.Text);
             input.initb = Convert.ToDouble(initb.Text);
             input.initc = Convert.ToDouble(initb.Text);
         }
         catch
         {
             MessageBox.Show("Some input values are not of …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading

38
推荐指数
3
解决办法
10万
查看次数

为什么可以在同一个类中创建的另一个线程中访问局部变量?

我真的找不到关于这个确切主题的任何内容,所以如果问题已经存在,请引导我走向正确的方向.

根据我对.NET的了解,不可能跨不同的线程访问变量(如果该语句错误,请纠正我,这正是我在某处读到的).

然而,现在在这个代码示例中,它似乎不应该工作:

class MyClass
{
    public int variable;

    internal MyClass()
    {
        Thread thread = new Thread(new ThreadStart(DoSomething));
        thread.IsBackground = true;
        thread.Start();
    }

    public void DoSomething()
    {
        variable = 0;
        for (int i = 0; i < 10; i++)
            variable++;

        MessageBox.Show(variable.ToString());
    }
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void SomeMethod();
    {
        MyClass mc = new MyClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行时SomeMethod()不应该.NET抛出异常,因为创建的对象mc运行在与mc-initializer中创建的线程不同的线程中,并且这个新线程正试图访问本地变量mc

这些MessageBox节目10是(不)预期的,但我不确定为什么这应该有效. …

c# multithreading local-variables

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

模拟许多粒子碰撞的有效方法?

我想编写一个模拟许多粒子碰撞的小程序,首先从2D开始(我稍后将其扩展到3D),到(在3D中)模拟向Boltzmann分布的收敛,并且还看到分布如何在2D中演化.

我还没有开始编程,所以请不要问代码示例,这是一个相当普遍的问题,应该可以帮助我开始.这个问题背后的物理问题对我没有任何问题,而事实是我必须模拟至少200-500个粒子,以实现非常好的速度分布.我想实时做到这一点.

现在,对于每个时间步,我将首先更新所有粒子的位置,然后检查碰撞,以更新新的速度矢量.然而,这包括很多检查,因为我必须看看每个粒子是否与其他每个粒子发生碰撞.我发现这个帖子或多或少都是同一个问题,而且那里使用的方法也是我唯一能想到的.但是,我担心这不会在实时工作得很好,因为它会涉及太多的碰撞检查.

所以现在:即使这种方法在性能上有所提升(说得40fps),有人可以想办法避免不必要的碰撞检查吗?

我自己的想法是将板(或3D:空间)分成具有至少粒子直径的尺寸的正方形(立方体),并且如果两个粒子的中心在adjecent正方形内,则实现仅检查碰撞的方式在网格中......

我很乐意听到更多的想法,因为我想尽可能多地增加粒子数量,并且仍在进行实时计算/模拟.

编辑:所有碰撞都是纯粹的弹性碰撞,没有任何其他力量对粒子进行处理.我将实现的初始情况由用户选择的一些变量确定,以选择随机起始位置和速度.

EDIT2:我发现了粒子碰撞的模拟一个很好的和非常有益的纸在这里.希望它可以帮助一些对更深层次感兴趣的人.

algorithm simulation collision-detection

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

DateTime.CompareTo实际返回什么整数?

我一直在寻找一段时间的答案,但实际上我找不到它.

我特别看这个页面.在那里它说该CompareTo方法返回一个整数,指示它是更早,相同还是更晚.我理解它的使用,我明白早期的整数是负的,因为它是0等.

但是这个整数是多少?它是以秒,毫秒,刻度还是根本没有返回差异?我希望你可以帮助我,如果有人能找到这个问题的另一篇文章,请告诉我.老实说,我很惊讶我立即找不到关于这个话题的问题......

c# datetime compareto

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

当另一个进程退出时,在C#中引发事件

我不知道这个问题是否已被提出,但我找不到任何内容,所以如果你能找到一些东西,请引导我朝着正确的方向前进.

基本上,我想在我的当前C#程序中添加一个事件,以便在另一个指定进程("example.exe")退出时引发.那可能吗?

如果那是不可能的,那么,当通过直接路径("C:\ somefolderpaths ...\example.exe")指定的进程退出时,是否存在引发事件的方法?

要添加:我的程序不会启动进程example.exe.

c# wpf events process

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

与例如通过foreach循环遍历数组相比,Array.ConvertAll的实际用途是什么?

我的问题通常是措辞,因此,我不会提供任何代码(除非有人要我添加它,但我认为我的问题很清楚).我一直在看两篇关于Array.ConvertAll方法的文章,但我自己找不到直接使用它的方法.我读过的文章:

http://msdn.microsoft.com/en-us/library/exc45z53.aspx

"转换器"(文章底部):http://www.codeproject.com/Articles/117611/Delegates-in-C-Attempt-to-look-inside-Part-4

现在我了解转换器的工作原理以及如何使用它,但是,我没有看到转换器的直接必要性.由于一个对象如何被转换为另一个对象的实际方法,必须完全确定(例如在codeproject链接中使用方法"ConvertToPersonInfo"或者是arroding Action/Lambda类型委托),是不是可以声明和实例化新对象的新数组,并对旧对象的旧数组进行foreach循环,并在该循环中复制所需的变量?

根据微软的文章,旧数组不受任何影响,因此最终效果不会有所不同.

我在这里错过了一点,并不理解转换器,还是它真的一样?

c# arrays converter

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

如何使用Debugger(VS Professional 2012)查找事件列表?

好吧,我找不到任何帮助我的问题和stackoverflow似乎也没有任何东西,或者我不知道如何寻找它(请纠正我,如果我错了,我会关闭这个问题).

在我的程序中,我有一个Grid在代码中定义了一些事件:

public Grid _grid = new Grid();
_grid.MouseLeftButtonDown += new MouseButtonEventHandler(MyMethod);
//and a few more events...
Run Code Online (Sandbox Code Playgroud)

现在在我的程序运行期间,我看到一些奇怪的行为只能来自某些事件,所以我设置了一个断点并停止程序使用调试器.

是否有一个列表,我可以找到列出该成员当前定义的所有事件的列表,_grid以便我可以检查是否还没有删除不需要的事件?

c# debugging wpf events visual-studio-2012

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

编译器可以优化多个相同的函数调用吗

关于 SO 上“冗余函数调用”的编译器优化有大量问题和好的答案(我不会发布链接),但是,我在 SO 上的多个相同函数调用上找不到任何内容。

假设我有这样的代码片段:

void fairlyComplexFunction(const double &angle)
{
    //do stuff and call "sin(angle)" very often in here
}
Run Code Online (Sandbox Code Playgroud)

调用sin(angle)是一个相当昂贵的操作,因为在正弦的每次调用angle范围内都是一个常量,fairlyComplexFunction最终会得到相同的结果,所以只调用一次将是一个更好的方法:

void fairlyComplexFunction(const double &angle)
{
    const double sineOfAngle = sin(angle);
    //do stuff and use sineOfAngle very often in here
}
Run Code Online (Sandbox Code Playgroud)

编译器是否能够以任何方式检测此类内容并为我优化它,或者第二个示例是更好的方法吗?

c++ optimization function

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

四元数 - 旋转到

我在世界空间中有一些物体,让我们说(0,0,0)并想要将它旋转到面(10,10,10).

我如何使用四元数?

c++ math quaternions

4
推荐指数
1
解决办法
4182
查看次数