问题列表 - 第35903页

为什么Dispatcher.Invoke在此示例中不执行委托参数?

    [Test]
    public void A()
    {
        var d = Dispatcher.CurrentDispatcher;

        Action action = () => Console.WriteLine("Dispatcher invoked me!");

        var worker = new BackgroundWorker();
        worker.DoWork += SomeWork;

        //worker.RunWorkerAsync( (Action) delegate { Console.WriteLine("This works!"); } );
        worker.RunWorkerAsync((Action) delegate { d.Invoke(action); } );

        System.Threading.Thread.Sleep(2500);
    }

    private void SomeWork(object sender, DoWorkEventArgs e)
    {
        (e.Argument as Action)();
    }
Run Code Online (Sandbox Code Playgroud)

这段代码不会引发异常.同时,Dispatcher.Invoke不执行任何操作.我发现这很奇怪.

我将一个辅助方法提取到一个基础ViewModel中.工作线程使用此方法DoOnUIThread()来避免线程关联问题.但是在我的单元测试中,我发现由于上述问题,尝试测试视图模型对象会导致失败.

我可以将整个行为移到可插入的依赖项中,我可以在测试中替换它.例如,ViewModelBase依赖于UIThreadExecutor.Execute(Action),我使用一个假的,只是在我的测试中调用动作.但是我很好奇为什么Dispatcher的行为方式如此......

.net c# wpf unit-testing

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

为 CSS 中的 MS 过滤器解密 HEX RGBA

我正在为一个页面编写样式,我想在某些列表项的背景上使用 rgba 颜色。我使用 CSS background 属性和 rgba(146,138,118,.4) 来定义我的透明背景颜色。

现在,我正尝试通过使用本文中描述的 ms-filter 技术来使用 IE 支持来覆盖我的基础。(请参阅标题“...和所有人的 RGBA。”)

问题显然是 MS 过滤器要求您在 RGBA 和十六进制之间使用某种类型的混合,其中 alpha 透明度值被转换为 00 和 FF 之间的数字。请参阅Microsoft 的此描述页面以供参考。

所以问题是我无法弄清楚到底如何将我的值从 RGBA 正确转换为 hex/rgba 混合方法。任何人都可以向我指出一些很好的参考资料吗?请不要只给我正确的值 - 除了那种颜色之外,这对我没有好处。我需要了解它背后的原理,谢谢。

css internet-explorer hex filter rgba

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

是否有任何静态分析工具可以帮助检测shared_ptr <>循环引用?

是否有任何静态分析工具可以帮助检测shared_ptr <>循环引用?

即使这样的工具无法检测到复杂的情况,它仍然可以用于消除简单的情况.

c++ static-analysis circular-reference

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

表单身份验证忽略默认文档

我花了一天半的时间试图解决这个问题.基本上有一个ASP.net网站使用Framework 4.0在IIS7上进行表单身份验证.

授权的东西似乎对每个场景都有效,除了没有指定文件(应该解析为默认文档).

例如(请不要在网站上苛刻它仍然被开发;)), http://www.rewardroster.com/Default.aspx完美地工作,这个页面应该允许匿名访问web.config中指定的.

但如果我直接点击www.rewardroster.com它会重定向到登录页面,返回URL设置为"/"或Login.aspx?ReturnUrl =%2f

我试过的一些事情:

1)将身份验证设置为无,然后默认文档工作,这不是问题.

2)为Web.config添加了DefaultDocument属性

3)删除了IIS中默认文档列表中除Default.aspx之外的所有条目

4)在Config中添加了MachineKey条目

5)在IIS中从集成管道切换到经典管道

这是我的配置中的内容:

  <authentication mode="Forms">
    <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/">
    </forms>
  </authentication>
  </authentication>

 <location path="Default.aspx">
Run Code Online (Sandbox Code Playgroud)

非常感谢你的时间,希望有人知道这里发生了什么.

asp.net iis-7 forms-authentication

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

C#从根本上说不便携?

我一直在使用C#,并且最近开始致力于为我的侧面项目添加并行性.因此,根据微软的说法,读取和写入int甚至浮点数都是原子的

我确信这些原子性要求在x86架构上运行得很好.但是,在ARM(可能没有硬件浮点支持)等体系结构上,似乎这些保证很难.

问题只是因为'int'总是32位而变得更加重要.有许多嵌入式设备无法自动执行32位写入.

这似乎是C#中的一个根本错误.保证这些数据类型的原子性不能轻松完成.

这些原子性保证如何在没有FPU或32位写入的架构上实现?

.net c# parallel-processing interlocked atomicity

16
推荐指数
4
解决办法
2944
查看次数

如何在不重构单独类的情况下对私有代码进行单元测试?

假设我有一个执行一些计算的私有例程:

private function TCar.Speed: float
{
   Result = m_furlogs * 23;
}
Run Code Online (Sandbox Code Playgroud)

但现在我想开始更彻底地测试这个计算,所以我将它重构为一个单独的函数:

public function TCar.Speed: float
{
   Result = CalculateSpeed(m_furlogs);
}

private function TCar.CalculateSpeed(single furlogs): float 
{
   Result = furlogs * 23;
}
Run Code Online (Sandbox Code Playgroud)

现在我可以执行各种测试CalculateSpeed:

Check( CalculateSpeed(0)  =  0);
Check( CalculateSpeed(1)  = 23);
Check( CalculateSpeed(2)  = 46);
Check( CalculateSpeed(88) = -1);
Run Code Online (Sandbox Code Playgroud)

除了我不能执行这些测试,因为CalculateSpeed是私有的TCar.单元测试的一个抽象的局面是你永远不会测试私有代码 - 只有公共接口.实际上,*x*Unit通常不能构造为能够访问被测试的单独类的私有方法.

问题是该类的其余部分都没有设置为处理单元测试.这是第一个将进行任何类型测试的例程.并且很难为主机类配置一组初始条件,这些条件允许我使用我想要的每组CalculateSpeed输入来测试调用.

我能看到的唯一选择是将这个私有计算移到它自己的TCarCalculateSpeed类中:

public class TCarCalculateSpeed
{  
   public function CalculateSpeed(float furlogs)
   {
      Result = furlogs * 23; …
Run Code Online (Sandbox Code Playgroud)

language-agnostic oop unit-testing

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

删除空白字符,除了PHP中的引号内部?

我需要从字符串中删除所有空格,但引用应保持原样.

这是一个例子:

string to parse:
hola hola "pepsi cola" yay

output:
holahola"pepsi cola"yay
Run Code Online (Sandbox Code Playgroud)

任何的想法?我确信这可以用正则表达式完成,但任何解决方案都没问题.

php regex whitespace parsing quotation-marks

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

如何在PHP中有条件地为我的查询添加一个子句?

在我的搜索表单中,我有,重视男性,重视女性,并重视两者.如果你同时选择两者,我不希望在那里"性别='$性'"

我应该这样做:

if(empty($sex)){ // value empty if you chose "both"
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '%$firstname%' OR lastname LIKE '%$lastname%')";
}else{
$query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE (firstname LIKE '%$firstname%' OR lastname LIKE '%$lastname%') AND sex = '$sex'";
}
Run Code Online (Sandbox Code Playgroud)

或者有一种聪明的方式来写这个吗?

php

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

如何正确等待调用Dispatcher.Invoke的多个线程在WPF应用程序中完成

我有一个WPF应用程序启动3个线程,需要等待它们完成.我在这里阅读了许多处理此问题的帖子,但似乎没有解决线程代码调用Dispatcher.Invoke或Dispatcher.BeginInvoke的情况.如果我使用线程的Join()方法或ManualResetEvent,则线程会在Invoke调用上阻塞.这是一个丑陋的解决方案的简化代码片段似乎有效:

class PointCloud
{
    private Point3DCollection points = new Point3DCollection(1000);
    private volatile bool[] tDone = { false, false, false };
    private static readonly object _locker = new object();

    public ModelVisual3D BuildPointCloud()
    {
        ...
        Thread t1 = new Thread(() => AddPoints(0, 0, 192));
        Thread t2 = new Thread(() => AddPoints(1, 193, 384));
        Thread t3 = new Thread(() => AddPoints(2, 385, 576));
        t1.Start();
        t2.Start();
        t3.Start();

        while (!tDone[0] || !tDone[1] || !tDone[2]) 
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
            Thread.Sleep(1);
        }

        ...
    }

    private …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading

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

从ftp获取最新文件

尝试创建一个简单的插件,只需连接到ftp站点,查找最新的文件,然后下载它.但是,它没有获取最新文件.

我正在使用org.apache.commons.net.ftp.ftpclient来处理所有事情.

这是我的代码

public static void main(String[] args)
  {
  FTPClient client = new FTPClient();
  try
  {
     client.connect(host);
     client.login(user, pwd);
     FTPFile[] files = client.listFiles();
     FTPFile lastFile = lastFileModified(files); 
     System.out.println(lastFile.getName());
     client.disconnect();
  }
  catch(SocketException e)
  {
     // TODO Auto-generated catch block
     e.printStackTrace();
  }
  catch(IOException e)
  {
     // TODO Auto-generated catch block
     e.printStackTrace();
  }

}

public static FTPFile lastFileModified(FTPFile[] files) {
  Date lastMod = files[0].getTimestamp().getTime();
  FTPFile choice = null;
  for (FTPFile file : files) {
          if (file.getTimestamp().getTime().after(lastMod)) {
                  choice = file;
                  lastMod = file.getTimestamp().getTime(); …
Run Code Online (Sandbox Code Playgroud)

java ftp

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