小编acr*_*ige的帖子

如何在WPF中使DispatcherTimer事件更顺畅?

在我的WPF应用程序中,用户按下按钮以启动平滑旋转的3D模型,然后让按钮停止旋转.

为此,我创建了一个DispatcherTimer:

DispatcherTimer timer = new DispatcherTimer();
timer.Tick += new EventHandler( timer_Tick );
timer.Interval = new TimeSpan( 0, 0, 0, 0, 30 );
Run Code Online (Sandbox Code Playgroud)

当按下按钮时,我打电话timer.Start(),当按钮松开时我打电话timer.Stop().

timer_Tick函数更改模型的旋转:

    void timer_Tick( object sender, EventArgs e )
    {
        spin = ( spin + 2 ) % 360;
        AxisAngleRotation3D rotation = new AxisAngleRotation3D( new Vector3D( 0, 1, 0 ), spin );
        Transform3D rotate = new RotateTransform3D( rotation );
        model2.Transform = rotate;
    }
Run Code Online (Sandbox Code Playgroud)

我注意到的是,模型在大多数情况下平滑旋转,但经常冻结和口吃,暂停不同的持续时间,有时高达1/4秒.

有没有办法让这更顺畅?我理解通过使用DispatcherTimer(而不是System.Timers.Timer),回调发生在UI线程上.但是为了运行这条线,我必须处于UI威胁之中

        model2.Transform = rotate;
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关在其他线程上获取计时器回调的各种方法.但似乎最终我必须与UI线程同步才能调用该行.如果我使用Invoke()从System.Timers.Timer回调线程编组到UI线程,那么会给整体更平滑的动画吗?它似乎不应该,因为它必须与UI线程同步,就像DispatcherTimer可能做的那样.对于这个问题,似乎任何设置 …

c# wpf smooth timer dispatchertimer

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

.NET Dictionary实现如何与可变对象一起使用

我理解不建议使用"可变"对象(GetHashCode()方法在将它们用作Dictionary中的键时可以返回不同结果的对象).

下面是我对作为哈希表实现的字典如何工作的理解:

例如dict.Add(m1, "initially here was m1 object");,当我添加新密钥时,dict计算m1使用该GetHashCode()方法的哈希码.然后它执行一些内部计算,最后将此对象放入其内部数组的某个位置.

当我使用的关键指标得到的值,例如dict[m1],dict重新计算的哈希码.然后它做了一些内部计算,它给了我一个对象,它位于其内部数组内部的计算位置.

但我认为有一个我无法找到的错误.

所以我们假设我有这个代码:

    class MutableObject
    {
         Int32 m_value;

         public MutableObject(Int32 value)
         {
             m_value = value;
         }

         public void Mutate(Int32 value)
         {
             m_value = value;
         }

         public override int GetHashCode()
         {
             return m_value;
         }
   }

   static void Main(string[] args)
   {
         MutableObject m1 = new MutableObject(1);
         MutableObject m2 = new MutableObject(2);

         var dict = new Dictionary<MutableObject, String>();
         dict.Add(m1, "initially here …
Run Code Online (Sandbox Code Playgroud)

.net c# hashtable data-structures

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

python threading.Event:添加事件参数

我是否可以使用来自线程模块的Event对象,不仅可以通知某些事件已发生,还可以提供此事件的一些参数,例如:

e = Event()
...
e.param = "this is event data"
e.set()
Run Code Online (Sandbox Code Playgroud)

另一个线程:

e.wait()
data = e.param
Run Code Online (Sandbox Code Playgroud)

乍一看似乎没问题,但有什么问题可以发生吗?安全吗?如果没有,还有什么方法可以更好地在线程之间传递一些事件参数?

感谢名单.

python multithreading

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

调用带有错误签名的main()函数

标准说:

5.1.2.2.1程序启动

程序启动时调用的函数名为main.该实现声明此函数没有原型.它应该使用返回类型int并且没有参数来定义:int main(void){/*...*/}或者有两个参数(这里称为argc和argv,尽管可以使用任何名称,如它们是声明它们的函数的本地函数):int main(int argc,char argv []){/ ...*/}或等价物; 10)或以某种其他实现定义的方式.

如果我写这个:

#include <stdio.h>

struct some_struct
{
    int i;
};

float main(struct some_struct s)
{
    printf("Why does this main get called?\n");
}
Run Code Online (Sandbox Code Playgroud)

实际上,正如我所见,它被任何原型调用,并且没有任何运行时错误.

为什么不禁止它?这没有理由吗?另外,如果签名错误,如何调用它?

我用过 gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

c program-entry-point

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

区分大小写的字符串比较

我想对字符串区分大小写:如果一个以大写"C"开头,那么它应该比以"c"开头但比小于以"d"开头的那个"更大"(例如). .

例如,排序列表:"a","A","chi","Che","Chr"

编写的字符串比较方法默认区分大小写.但看起来我对"区分大小写"的理解与默认情况不同.

我尝试过的默认方法(String.CompareTo,String.Compare(使用不同的StringComparison值))都没有给出我想要的结果.

这是我用于测试的代码:

using System;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        var list = new List<String> { "Che", "Chr", "chi", "a", "A" }; 

        // Any other way to sort goes here
        list.Sort((s1, s2) => s1.CompareTo(s2));

        for (var i = 0; i < list.Count; i++)
        {
            Console.WriteLine(list[i]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个代码恰好给出了结果:"a""A""Che""chi""Chr".这么小的"c"站在"C"之间.

所以,问题是:有没有办法用任何默认方法实现我想要的排序顺序(看起来非常明显),而无需编写我自己的比较器?我错过了什么吗?

.net c# sorting string

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

iOS验证应用商店购买ID由开发人员

如何查看用户从订单列表中发送给我的购买ID?

例如,他可以发送类似的内容:M1VYXX7VX7(如他在appstore中的购买列表中所写)并要求退回他的购买(可能是他意外删除了他的应用程序),

但是当我在我的代码中获得订单信息(通过SKPaymentTransaction)时,我无法访问该标识符.然后只有ID我看起来像:1000000020706713.

那么有没有办法使用应用商店发送给我的信息来验证购买ID?

谢谢.

objective-c app-store ios

3
推荐指数
1
解决办法
2373
查看次数