小编Igo*_*pov的帖子

如何将样式基于资源字典中的另一种样式?

我有一个主题应用于资源字典中的所有按钮.现在我想在继承字典中的样式更改时向按钮添加触发器.我尝试了以下代码,但它说无法找到控件.我该如何解决?

<UserControl.Resources>
  <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="Theme.xaml"/>
      </ResourceDictionary.MergedDictionaries>

      <conv:ErrorContentConverter x:Key="ErrorContentConverter" />

      <Style x:Key="ValidTrigger" 
             TargetType="Control" BasedOn="{StaticResource {x:Type Control}}">
         <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsValid}" Value="False">
              <Setter Property="IsEnabled" Value="false" />
            </DataTrigger>
         </Style.Triggers>
      </Style>   
  </ResourceDictionary>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

基本模板:

    <Style TargetType="{x:Type Button}" BasedOn="{x:Null}">
    <Setter Property="FocusVisualStyle" 
            Value="{DynamicResource NuclearButtonFocusVisual}" />
    <Setter Property="Foreground" Value="#FF042271" />
    <Setter Property="FontFamily" Value="Trebuchet MS" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="Padding" Value="3" />

    <Setter Property="Template" Value="{DynamicResource ButtonTemplate}" />
</Style>
Run Code Online (Sandbox Code Playgroud)

wpf xaml styles

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

来自.git/objects的随机对象上的'git cat-file -p <sha1>':"致命:不是有效的对象名称"

我想更多地了解git的内部工作原理,所以我运行了这些命令:

cd .git/objects/62

ls
00cb2f01089db22aca24675272a16712e89747
0ee798881329430bfef6c558be7b14c1f0676f
1087f408e2f2bd782d53a1211a7418fee4f6a7
a6a71f3bd5a3af882f3f0ec4fad4c672055746
f95e69f344b52c5038d922260189475626e69a

git cat-file -p 00cb2f01089db22aca24675272a16712e89747
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

fatal: Not a valid object name 00cb2f01089db22aca24675272a16712e89747
Run Code Online (Sandbox Code Playgroud)

我为什么得到它?

我试了10次(对于.git/objects里面不同目录的不同文件)并得到了同样的错误.

如何查看文件的实际内容(无论是blob,树还是提交)?

git

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

如何从tomcat webapp中的context.xml文件获取资源?

这是我的context.xml文件:

...
<Resource auth="Container"
          driverClass="net.sourceforge.jtds.jdbc.Driver"
          type="com.jolbox.bonecp.BoneCPDataSource"
          idleMaxAge="240"
          idleConnectionTestPeriod="60"
          partitionCount="3"
          acquireIncrement="1"
          maxConnectionsPerPartition="10"
          minConnectionsPerPartition="3"
          statementsCacheSize="50"
          releaseHelperThreads="4"

          name="jdbc/MyDatasource"
          username="my_username"
          password="my_password"
          factory="org.apache.naming.factory.BeanFactory"
          jdbcUrl="jdbc:jtds:sqlserver://localhost:12345/my_database"
/>
...
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用ServletContext.getResource(java.lang.String)和资源名称("jdbc/MyDatasource"),但Tomcat抱怨该名称不以'/'开头.我也试过"/ jdbc/MyDatasource",但这次它返回null.

我主要需要jdbcUrl与数据库服务器进行连接检查(查看服务器是否在线且可操作).

java tomcat jndi web-applications context.xml

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

我的ISP强迫我在发送之前缓冲tcp数据

我有一个Java TCP游戏服务器,我使用java.net.ServerSocket并且一切运行得很好,但最近我的ISP做了某种升级,其中,如果你为同一个TCP连接快速发送两个数据包,他们会强制关闭它.

这就是为什么我的很多玩家在游戏中有大量流量的情况下随机断开连接(当服务器有很多机会同时为同一个人发送2个数据包时)

这是我的意思的一个例子:如果我做这样的事情,我的ISP将无缘无故地关闭连接到客户端和服务器端:

tcpOut.print("Hello.");
tcpOut.flush();

tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

但是如果我做这样的事情,它会工作得很好:

tcpOut.print("Hello.");
tcpOut.flush();

Thread.sleep(200);

tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

或这个:

tcpOut.print("Hello.");
tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

这只是在几周前他们(ISP)对服务和网络进行了一些更改时才开始的.我注意到使用Wireshark你必须在两个数据包之间至少有大约150ms的时间用于相同的TCP连接,否则它将关闭.

1)你们知道这叫什么?是甚至有名字?这合法吗?

现在我必须重新编写我的游戏服务器,知道我使用了一个名为的方法: send(PrintWriter out, String packetData);

2)在将数据发送给客户端之前,是否有任何简单的解决方案要求java缓冲数据?或者在每次发送前等待150ms而不必重写整个事情?我做了一些谷歌搜索,但我找不到任何处理这个问题.任何有关此问题的提示或信息都会非常感激,顺便提一下速度优化非常关键.谢谢.

java networking tcp wireshark

12
推荐指数
2
解决办法
752
查看次数

如何在MVVM中对异步ICommand进行单元测试?

我一直在谷歌搜索,甚至Binging,我没有想出任何令人满意的东西.

我有有一些命令,比如一个ViewModel: SaveCommand,NewCommandDeleteCommand.我SaveCommand执行保存到文件操作,我想成为一个async操作,以便UI不等待它.

SaveCommandAsyncCommand的一个实例,它实现了ICommand.

 SaveCommand = new AsyncCommand(
  async param =>
        {
            Connection con = await Connection.GetInstanceAsync(m_configurationPath);
            con.Shoppe.Configurations = new List<CouchDbConfig>(m_configurations);
            await con.SaveConfigurationAsync(m_configurationPath);
            //now that its saved, we reload the Data.
            await LoadDataAsync(m_configurationPath);
        }, 
 ...etc
Run Code Online (Sandbox Code Playgroud)

现在我正在为我的ViewModel构建一个测试.在其中,我创建了一个新的东西NewCommand,我修改它,然后使用SaveCommand.

vm.SaveCommand.Execute(null);
Assert.IsFalse(vm.SaveCommand.CanExecute(null));
Run Code Online (Sandbox Code Playgroud)

我的CanExecute方法(未显示)SaveCommand应该False在项目保存后立即返回(没有保存未更改项目的点).但是,上面显示的Assert总是失败,因为我不是在等待SaveCommand完成执行.

现在,我迫不及待地想要完成执行,因为我做不到.将ICommand.Execute不返回Task.如果我改变了AsyncCommand它的Execute返回值,Task那么它将无法ICommand正确实现接口.

因此,出于测试目的,我认为我现在唯一可以做的 …

c# unit-testing mvvm icommand task-parallel-library

12
推荐指数
2
解决办法
3564
查看次数

Artifactory中的依赖关系解析配置

最近我们开始使用Artifactory.我们将settings.xml配置为Artifactory建议.但是,在运行"mvn compile"时我们在下载jar时遇到问题,即使它们出现在Artifactory repo中.显式添加repo1-cache解决了编译问题,但是从远程存储库而不是Artifactory执行下载.

<repository>
    <id>My Repository</id>
    <name>MyRepository-releases</name>
    <url>http://mvn-srv:8081/artifactory/repo1</url>
</repository>
Run Code Online (Sandbox Code Playgroud)

应该添加到settings.xml中以自动解决依赖关系并从工件中获取它们而不是每次访问远程服务器?

settings.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<settings
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<profiles>
    <profile>
        <repositories>
            <repository>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <id>central</id>
                <name>libs-release</name>
                <url>http://mvn-srv:8081/artifactory/libs-release</url>
            </repository>
            <repository>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <id>snapshots</id>
                <name>libs-snapshot</name>
                <url>http://mvn-srv:8081/artifactory/libs-snapshot</url>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <id>central</id>
                <name>plugins-release</name>
                <url>http://mvn-srv:8081/artifactory/plugins-release</url>
            </pluginRepository>
            <pluginRepository>
                <snapshots />
                <id>snapshots</id>
                <name>plugins-snapshot</name>
                <url>http://mvn-srv:8081/artifactory/plugins-snapshot</url>
            </pluginRepository>
        </pluginRepositories>
        <id>artifactory</id>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>artifactory</activeProfile>
</activeProfiles>
<servers>
    <server>
        <id>MyRepository</id>
    </server>
</servers>
Run Code Online (Sandbox Code Playgroud)

编译错误:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.355s
[INFO] Finished at: …
Run Code Online (Sandbox Code Playgroud)

dependencies artifactory pom.xml maven

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

如何从头开始实现异步I/O绑定操作?

我试图了解如何以及何时使用async编程并进行I/O绑定操作,但我不理解它们.我想从头开始实现它们.我怎样才能做到这一点?

考虑下面的同步示例:

private void DownloadBigImage() {
    var url = "https://cosmos-magazine.imgix.net/file/spina/photo/14402/180322-Steve-Full.jpg";
    new WebClient().DownloadFile(url, "image.jpg");
}
Run Code Online (Sandbox Code Playgroud)

我如何async通过只使用正常的同步方法DownloadBigImage Task.Run实现该版本而不使用,因为这将仅使用线程池中的线程进行等待 - 这只是浪费!

不要使用已经有的特殊方法async!这就是这个问题的目的:如何在不依赖已经异步的方法的情况下自己制作它?所以,没有像这样的事情:

await new WebClient().DownloadFileTaskAsync(url, "image.jpg");
Run Code Online (Sandbox Code Playgroud)

在这方面非常缺乏可用的示例和文档.我发现只有这个:https: //docs.microsoft.com/en-us/dotnet/standard/async-in-depth ,其中说:

对GetStringAsync()的调用通过较低级别的.NET库(可能调用其他异步方法)调用,直到它到达本机网络库的P/Invoke互操作调用.本机库随后可以调用System API调用(例如对Linux上的套接字的write()).将在本机/托管边界创建任务对象,可能使用TaskCompletionSource.任务对象将通过层传递,可能在操作或直接返回,最终返回到初始调用者.

基本上我必须使用" P/Invoke互操作调用到本机网络库 "......但是如何?

c# asynchronous async-await

9
推荐指数
2
解决办法
475
查看次数

如何在 Autofac 中使用 Automapper

我已升级到最新版本的 AutoMapper (9.0),并将静态配置更改为:

public static IMapper RegisterAutoMapper()
{
    var config = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<MyModel MyDto>;
        //etc...
   });
  
   var mapper = config.CreateMapper();
   return mapper;
}
Run Code Online (Sandbox Code Playgroud)

使用以前的静态 API,我曾经在 中执行以下操作Global.asax

protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
    AutoMapping.Map();
}
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.Register 注册路线,也 Autofac

我如何向 Autofac 注册 AutoMapper,因为目前我在这些行上遇到编译器错误:

var myDto = Mapper.Map<MyModel>(model);
Run Code Online (Sandbox Code Playgroud)

和编译器错误:

非静态字段、方法或属性“Mapper.Map(object)”需要对象引用

c# autofac automapper asp.net-web-api asp.net-web-api2

9
推荐指数
2
解决办法
6458
查看次数

如何静默安装Visual Studio代码(安装结束时不自动打开)?

我找到了从命令行(vscode-installer.exe /VERYSILENT)静默安装的选项,它仍然在安装结束时自动打开,因此在多台计算机上进行无人值守安装是不方便的.

我查看了Inno Setup的文档(这是Visual Studio Code安装程序使用的文档),但是没有任何与禁用Visual Studio Code自动启动相关的内容(即使是非常安静的安装).

可能有一种方法可以使用/COMPONENTS,/TASKS或者/MERGETASKS,为此,我需要知道已经可以使用的内容.

有没有办法让它完全安静地安装?

installation inno-setup silent-installer visual-studio-code

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

如何从内存数据库中检索列名?

这是令我头疼的代码:

  public List<String> listColumnsForTable(String tableName) throws SQLException {
    List<String> columns = new ArrayList<String>();
    DatabaseMetaData metadata = _connection.getMetaData();
    ResultSet resultSet = metadata.getColumns(null, null, tableName, null);
    while (resultSet.next())
      columns.add(resultSet.getString("COLUMN_NAME"));
    return columns;
  }
Run Code Online (Sandbox Code Playgroud)

此代码适用于SQL Server(我没有检查过MySQL,Oracle或其他),但我需要在内存数据库中运行一些集成测试.我尝试的所有数据库(h2,hsqldb和derby)都失败了.

这是github上的链接.

如果你想要完整的项目(测试h2,hsqldb,derby和sql server),请执行以下操作:

git clone git://github.com/sensui/InMemoryColumns.git
cd InMemoryColumns
gradlew
Run Code Online (Sandbox Code Playgroud)

所有依赖项将自动下载.如果要查看库版本,请查看build.gradle脚本.

现在,在您喜欢的IDE(eclipse或idea)中导入项目.

测试在DatabaseMetadataCheckerTests类(canListColumnsForTablecanCheckIfColumnsExistInTable)中可用.

通常你不应该修改它们.我创建了4个测试类,为内存数据库中的每个提供连接细节,你需要运行它们(这DatabaseMetadataCheckerTests是抽象的,所以你不运行它).

注意: 当/找到解决方案时,将通过该特定数据库的测试.您可以通过扩展DatabaseMetadataCheckerTests类并提供连接详细信息(检查其他测试)轻松尝试其他数据库,如Oracle或MySQL .

问题解决了

表名和列名应该是 …

java jdbc derby h2 hsqldb

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