RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-277742

Rootware's questions

Martin Hope
Rootware
Asked: 2024-10-08 23:29:14 +0000 UTC

以编程方式构造带有字符串键值对的 ResourceDictionary

  • 5

给定Dictionary<string, string>,如何在不手动编辑文件的情况下创建语言资源的ResourceDictionary字典?框架内是否有任何内置工具可以序列化/反序列化ResourceDictionary?

字典示例:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:v="clr-namespace:System;assembly=mscorlib">
    <!-- Main window -->
    <v:String x:Key="m_Title">Пример WPF локализации</v:String>
    <v:String x:Key="m_lblHelloWorld">Привет мир!</v:String>
    <v:String x:Key="m_menu_Language">Язык</v:String>
    <v:Double x:Key="m_Number">10.5</v:Double>
</ResourceDictionary>

本地化示例取自此处。

wpf
  • 1 个回答
  • 24 Views
Martin Hope
Rootware
Asked: 2023-06-17 15:09:09 +0000 UTC

用于 C# 的 Java DeflaterInputStream 和 DeflaterOutputStream

  • 7

告诉我,对于 .NET Framework 4.6.1 及以下版本,在 C# 中是否有正常的zlib实现?面临文本压缩的问题。该算法的GitHub上的算法的zlib实现的任何测试版本都正常将字节数组解包为文本,但打包后与原始版本相比,前2个字节的字节数组不同,最后还有大约 6 个字节,这最终使它在后续解包时被破坏。同时,在 Java 版本中,一切正常。打包后的文字与拆包和打包前的原件完全一致。换句话说,以具有打包文本的字节数组为例,在解包和打包操作后,我无法使用 .NET 工具在输出中获得相同的字节数组。

在此处输入图像描述

测试表单代码:

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Test_Compression.utils;
using zlib;

namespace Test_Compression
{
    public partial class Form1 : Form
    {
        // Source code of ZLIB
        // http://www.componentace.com/zlib_.NET.htm

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonRun_Click(object sender, EventArgs e)
        {
            byte[] source = File.ReadAllBytes("original.bin");

            string sourceHex = HexUtil.printData(source);
            this.richTextBox1.Text = sourceHex;

            byte[] TextBlock;
            DecompressData(source, out TextBlock);

            string text = Encoding.Default.GetString(TextBlock);
            this.richTextBox3.Text = text;

            byte[] CompressedBlock;
            CompressData(TextBlock, out CompressedBlock);

            string compressedHex = HexUtil.printData(CompressedBlock);
            this.richTextBox2.Text = compressedHex;
        }

        public static void CompressData(byte[] inData, out byte[] outData)
        {
            using (MemoryStream outMemoryStream = new MemoryStream())
            using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
            using (Stream inMemoryStream = new MemoryStream(inData))
            {
                CopyStream(inMemoryStream, outZStream);
                outZStream.finish();
                outData = outMemoryStream.ToArray();
            }
        }

        public static void DecompressData(byte[] inData, out byte[] outData)
        {
            using (MemoryStream outMemoryStream = new MemoryStream())
            using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
            using (Stream inMemoryStream = new MemoryStream(inData))
            {
                CopyStream(inMemoryStream, outZStream);
                outZStream.finish();
                outData = outMemoryStream.ToArray();
            }
        }

        public static void CopyStream(Stream input, Stream output)
        {
            byte[] buffer = new byte[2000];

            int len;
            while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
                output.Write(buffer, 0, len);

            output.Flush();
        }

        private void buttonClear_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Clear();
            this.richTextBox2.Clear();
            this.richTextBox3.Clear();
        }
    }
}

我附上一个项目来检查开箱和打包。

https://disk.yandex.ru/d/HpBzcz4QBWRUkA

c#
  • 1 个回答
  • 74 Views
Martin Hope
Rootware
Asked: 2023-04-20 14:36:54 +0000 UTC

自定义元素中的 StackOverFlowException

  • 6

很多时候,我需要在 DataGridView 元素中默认显示一个垂直滚动条。出于这些目的,我对标准控件使用了一个简单的扩展器。

internal partial class CustomDataGridView : DataGridView
{
    internal CustomDataGridView() : base()
    {
        this.VerticalScrollBar.Visible = true;
        this.VerticalScrollBar.VisibleChanged += new EventHandler(VerticalScrollBar_VisibleChanged);
    }

    internal void VerticalScrollBar_VisibleChanged(object sender, EventArgs e)
    {
        if (!this.VerticalScrollBar.Visible)
        {
            this.VerticalScrollBar.Location = new Point(this.ClientRectangle.Width - this.VerticalScrollBar.Width - 1, 1);
            this.VerticalScrollBar.Height = this.ClientRectangle.Height - 2;
            this.VerticalScrollBar.Width = this.VerticalScrollBar.Width;
            this.VerticalScrollBar.Show();
        }
    }
}

我最近注意到,当 CustomDataGridView 被重新填充时,不知从哪里弹出一条消息。发生的频率是不可预测的。它可以毫无问题地更新 20 次,或者它可以在第一次更新时发出这个:

在此处输入图像描述

控制代码本身如下:

    public void writeNameTable(NameTable NameTable)
    {
        if (InvokeRequired)
        {
            BeginInvoke(new writeNameTableDelegate(writeNameTable), new object[] { NameTable });
            return;
        }

        this.dataGridView1.Rows.Clear();

        NAME_TABLE = NameTable.NAMES;
        for (int i = 0; i < NAME_TABLE.Length; i++)
        {
            this.dataGridView1.Rows.Add(1);

            int index = this.dataGridView1.Rows.GetLastRow(DataGridViewElementStates.Visible);

            this.dataGridView1.Rows[index].Cells[0].Value = i.ToString();
            this.dataGridView1.Rows[index].Cells[1].Value = NAME_TABLE[i].Name;
            this.dataGridView1.Rows[index].Cells[2].Value = ((ObjectFlags)NAME_TABLE[i].ObjectFlag).ToString();
        }
    }

问题:如何捕获/修复这样的异常?

c#
  • 1 个回答
  • 33 Views
Martin Hope
Rootware
Asked: 2020-09-28 17:03:55 +0000 UTC

DataGridView 中的最小行/单元格高度

  • 0

有一个表格DataGridView,其中包含不同大小的单元格内容。我想设置一个最小高度来垂直对齐所有行,并在滚动到最后时删除元素边框和最后一行之间的空白空间。这对于 WinForms 中的给定元素是否可行?

预习

winforms
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-07-16 12:04:21 +0000 UTC

如何正确地将 DISTINCT 添加到 MySQL 查询

  • 0

有一个查询可以从表中计算活动会话的数量:

SELECT count(*) FROM sessions WHERE last_active >= DATE_SUB(NOW(), INTERVAL 15 MINUTE);

该表具有字段SESSIONID、uid、last_active。uid字段包含帐户ID 。在所有其他情况下(访客、搜索机器人)它等于零。告诉我如何根据 when 条件正确添加DISTINCTuid > 0以丢弃用户多会话统计信息并将其计为一个?

mysql
  • 4 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-06-25 03:55:44 +0000 UTC

将一组数字打包/解包到一个字段中

  • 2

有一种彩票,其中从 1 到 20 产生 5 个号码。例如:3、10、2、14、9。

选择题:

  • 如何将 5 个选定的数字打包到一个 INT32 字段中,以便将其紧凑地存储在数据库中,然后在必要时将其解包回一组数字以供使用?
  • 或者你能告诉我怎么做吗?
  • 或者在哪里阅读解决此类问题的算法(俄语)?
java
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-11-23 15:13:56 +0000 UTC

根据内容计算TextBox的高度

  • 1

如何正确计算带有 config的TextBoxMultiline = true元素的高度,Margin = 3;3;3;3以及不包含换行符的文本,但宽度取决于父元素的大小,而父元素的大小又取决于TextBox之前的内容?

目前,我使用以下代码尝试根据长度考虑自动连字:

string[] words = info.getDescription().Split(' ');

int heightIncrement = TextRenderer.MeasureText(info.getDescription(), this.labelDesc.Font).Height;
int fHeight = 0;
int lineWidth = 0;
int maxWidth = this.Width - 6; // Padding before left and right borders form and textbox.

int lines = 0;
for (int i = 0; i < words.Length; i++)
{
    int wordWidth = TextRenderer.MeasureText(words[i], this.labelDesc.Font).Width;
    if (lineWidth + wordWidth >= maxWidth)
    {
        lineWidth = wordWidth + 3; // Add space size after word.
        fHeight += heightIncrement;
        lines += 1;
        continue;
    }

    lineWidth += wordWidth;

    if (i < words.Length - 1)
        lineWidth += 3; // Add space size after word.
}

this.labelDesc.Width = this.Width - 6;
this.labelDesc.Height = fHeight;
this.labelDesc.Text = info.getDescription();
this.labelDesc.Visible = true;

在 50% 的情况下是猜测。在 40% 时,它将高度增加 1-2 行。在 10% 的情况下会丢失一条线。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-10-08 22:23:41 +0000 UTC

将按钮动态添加到网格 StackPanel

  • 1

告诉我如何向 StackPanel 元素的 Grid 添加按钮。我的代码:

<StackPanel Grid.Row="2" Width="350" Height="50" Name="ButtonsPanel" Background="#99000000" Orientation="Horizontal" SnapsToDevicePixels="True">
        <Grid>
             <Grid.RowDefinitions>
                  <RowDefinition Height="50" />
             </Grid.RowDefinitions>
             <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="350" />
             </Grid.ColumnDefinitions>
             <!-- Put buttons here. -->
        </Grid>
   </StackPanel>

如果我将按钮静态分配给 StackPanel,那么一切正常。按钮接受Horizo​​ntalAlignment和Margin。但是按钮的数量是根据条件确定的,静态选项不再适用。如果我以编程方式添加它们,则不会显示按钮。如果我从 StackPanel 中删除 Grid 网格,则按钮都沿左边缘聚集在一个堆中。

我这样添加:

var button = new Button
{
    Name = "testButton",
    Content = "Test 1",
    Width = 80,
    Margin = new Thickness(0, 10, 0, 0),
    Style = (Style) Application.Current.FindResource("Flat"),
    VerticalAlignment = VerticalAlignment.Top,
    HorizontalAlignment = HorizontalAlignment.Center,
};

this.ButtonsPanel.Children.Add(button);

当然,有不同数量的按钮,Horizo​​ntalAlignment和Margin参数会根据按钮的数量而变化。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-18 03:02:27 +0000 UTC

从 MySQL 获取位置编号作为查询的结果

  • 0

有一个像这样的表test_table:

==============
id  |   score
==============
1   |   22222
2   |   33333
3   |   789877
4   |   444
5   |   555

如何在一个查询中获取特定id的位置,按分数字段按DESC顺序排序?我需要根据他当前的结果为每个玩家输出他当前的位置。

我从搜索中尝试了这个选项,但结果不一样。位置编号始终为 1。

SELECT @n:=@n+1 AS row_number, score FROM (SELECT @n:=0, score FROM test_table t1 WHERE id=4 ORDER by score DESC) t2;

尝试了类似问题的解决方案,但出现错误。

SELECT * FROM (
SELECT @i := @i + 1 AS row_number, test_table.id as id
FROM test_table ORDER BY test_table.score DESC, (select @i:=0) AS z) as m WHERE id=4;

错误

[Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'AS z) as m WHERE val=4' 附近使用正确的语法

mysql
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-07-05 14:36:58 +0000 UTC

文件版本控制的哈希和

  • 1

有一个游戏客户端,其中有大约 2000 个文件,大小从几千字节到数百兆字节不等。所有文件都是二进制文件,即 没有文字。

客户端是我不时修改的,因此我通过启动器使用自己编写的版本控制来检查游戏客户端的完整性,并在必要时进行更新。出于这些目的,我使用文件的 md5 哈希和。由于 MD5 哈希计算了相当长的时间(!),我使用两种类型的验证 - 快速(所有重要文件)和完整。

历史上发生了这样的事情,出于某种原因,我从一开始就开始使用这个特殊的哈希。我听说并阅读了有关 Adler32 和 CRC32 算法的信息,但我不确定在我的情况下不会发生冲突,因为 有时差异是文件的一个字节,或者可能完全不同。

如果有人已经有为此类任务计算快速可靠的哈希和的经验,那么请告诉我一个更优化的算法,因为。目前,对客户端的全面检查大约需要 5-10 分钟(即磁盘上大约 11 GB 的数据),具体取决于计算机。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-05-30 09:24:21 +0000 UTC

Java 和 C# 应用程序之间的 RSA 加密

  • 3

为什么在 C# 和 Java 中生成 512 位 RSA 密钥时,公钥字节的长度不同?

C#代码示例:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512);
XDocument xdocPub = XDocument.Parse(rsa.ToXmlString(false));
string publicKey = xdocPub.Element("RSAKeyValue").Element("Modulus").Value;

byte[] publicArray = Convert.FromBase64String(publicKey);
Console.WriteLine("Public Key Byte Array Length: " + publicArray.Length);
Console.WriteLine("Public Key Base64 Length: " + publicKey.Length);
Console.WriteLine("Public Key Text: " + publicKey);

结果:

Public Key Byte Array Length: 64
Public Key Base64 Length: 88
Public Key Text: uELcIjgR6GpiayZ1wHruHOtO8dpg+xmg85VAvunWUEL+aifoyk9+CA/dez4UmuIwLEgRlpVoIIOD0e5i9v8lrQ==

Java 代码示例:

final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(new RSAKeyGenParameterSpec(512, RSAKeyGenParameterSpec.F4));
KeyPair pair = keyGen.genKeyPair();

final byte[] arrayPublic = ((RSAPublicKey) pair.getPublic()).getModulus().toByteArray();

System.out.println("Public Key [origin] lenght: " + arrayPublic.length);

String publicBase64 = Base64.getEncoder().encodeToString(arrayPublic);

System.out.println("Public Key [base64] lenght : " + publicBase64.length());
System.out.println("Public Key [base64]: " + publicBase64);

结果:

Public Key [origin] lenght: 65
Public Key [base64] lenght : 88
Public Key [base64]: ANuun1/CnOmk2ghsydz4cKvPCd7q0YqqeyjzLqtKx7QHqv1tFjJYsXquYGcY8zkaPsPBrRlCAJov7+J88GaFDKc=

我注意到在Java生成的key的字节数组中,key数组的开头有一个空字节。

最有趣的是,如果我从 C# 应用程序发送一个长度为 64 字节的密钥,那么在 Java 应用程序中,我会在以下代码中收到错误“指数大于模数”:

try
{
    final KeyFactory kfac = KeyFactory.getInstance("RSA");
    final BigInteger modulus = new BigInteger("здесь вставляется byte[] массив публичного ключа от C#");
    final RSAPublicKeySpec kspec1 = new RSAPublicKeySpec(modulus, RSAKeyGenParameterSpec.F4);

    RSAPublicKey publicKey = (RSAPublicKey) kfac.generatePublic(kspec1);
}
catch (GeneralSecurityException e)
{
    e.printStackTrace();
}

同时,如果我在将密钥从 C# 应用程序发送到 Java 应用程序之前在密钥的开头添加一个零字节,那么从 Java 应用程序端来看,加密初始化和发送数据的加密没有问题。但在这种情况下,我无法使用相同的加密实例对 C# 应用程序中的传入数据进行解码。我收到“错误数据”错误。

告诉我我做错了什么以及为什么键的长度不同?

UPD 1:添加了 Java 测试

PublicKey 取自 C# 中生成的第一个示例。

public class Test
{
    public static void main(String[] args)
    {
        final String base64key = "uELcIjgR6GpiayZ1wHruHOtO8dpg+xmg85VAvunWUEL+aifoyk9+CA/dez4UmuIwLEgRlpVoIIOD0e5i9v8lrQ==";

        try
        {
            byte[] publicKeyArray = Base64.getDecoder().decode(base64key);
            final KeyFactory kfac = KeyFactory.getInstance("RSA");
            final BigInteger modulus = new BigInteger(1, publicKeyArray);
            final RSAPublicKeySpec kspec1 = new RSAPublicKeySpec(modulus, RSAKeyGenParameterSpec.F4);

            RSAPublicKey publicKey = (RSAPublicKey) kfac.generatePublic(kspec1);

            byte[] array = publicKey.getModulus().toByteArray();

            System.out.println("Public Key [Array] lenght : " + array.length);

            String publicBase64 = Base64.getEncoder().encodeToString(array);

            System.out.println("Public Key [base64] lenght : " + publicBase64.length());
            System.out.println("Public Key [base64]: " + publicBase64);
        }
        catch (GeneralSecurityException e)
        {
            e.printStackTrace();
        }
    }
}

由于 RSAPublicKey 被初始化为 Java Base64,因此密钥与输入不匹配。虽然长度是65字节。但这仅适用于signum = 1.

Public Key [Array] lenght : 65
Public Key [base64] lenght : 88
Public Key [base64]: ALhC3CI4EehqYmsmdcB67hzrTvHaYPsZoPOVQL7p1lBC/mon6MpPfggP3Xs+FJriMCxIEZaVaCCDg9HuYvb/Ja0=

UPD 2:C# 生成 RSA 密钥的问题由Bouncy Castle库解决。该库有源代码,所以我只使用了 RSA 部分并在我的项目中实现了它。

java
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-10-30 12:28:29 +0000 UTC

Label 元素覆盖 PictureBox 中绘制的形状

  • 1

表单中有一个用于绘制PictureBox形式的字段。为了查看鼠标位置的当前坐标,添加了一个Label元素。此元素附加到光标,而字段中的最后一个元素PictureBox。

鼠标光标的工具提示代码:

public Label coordToolTip = new Label() { BorderStyle = BorderStyle.FixedSingle, BackColor = Color.WhiteSmoke, AutoSize = true };

向PictureBox添加工具提示:

this.pictureBox1.Controls.Add(coordToolTip);

启用/禁用/移动光标标签的事件:

private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
    coordToolTip.Visible = false;
    this.Cursor = Cursors.Default;
}

private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
    if (this.pictureBox1.Image == null)
        return;

    coordToolTip.Visible = true;
    this.Cursor = CursorUtil.CreateCursorNoResize(new Bitmap(Properties.Resources.Crosshair), 16, 16);
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (this.pictureBox1.Image == null)
        return;

    int offsetX = coordToolTip.Size.Width + (e.X + 15) > this.pictureBox1.Width ? -(coordToolTip.Size.Width + 10) : 10;
    int offsetY = coordToolTip.Size.Height + (e.Y + 15) > this.pictureBox1.Height ? -(coordToolTip.Size.Height + 10) : 10;

    Point location = new Point(e.X, e.Y);
    location.Offset(offsetX, offsetY);
    coordToolTip.Location = location;
    coordToolTip.Text = "X: " + e.X + "\nY: " + e.Y;
}

我使用以下代码从数组中绘制形状:

List<IntIntHolder> array = SHAPES[index];
Point[] points = new Point[array.Count];
for (int i = 0; i < array.Count; i++)
{
    IntIntHolder holder = array[i];
    points[i].X = holder.getKey();
    points[i].Y = holder.getValue();
}

Graphics graph = this.pictureBox1.CreateGraphics();
Pen pen = new Pen(Brushes.Red, 2);
graph.DrawPolygon(pen, points);

最后,我按预期得到了一切。但!一旦光标后面的Label元素经过绘制的形状,该点的形状就会像橡皮擦一样被擦除。PictureBox图像本身不会改变。

但是在执行这段代码时

this.pictureBox1.Invalidate();

在所有图形消失之前,它们会再次出现/被绘制然后被删除。

问题:告诉我如何解决这个问题(我搞砸了),或者实现类似功能的方式是否更正确。

winforms
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-10-11 04:14:15 +0000 UTC

Java 10 中的 Javac

  • 1

在 Java 8 的 Apache Ant 脚本中,我使用以下行:

<javac srcdir="${src}" classpathref="classpath" destdir="${build.bin}" compiler="javac1.8"
debug="true" debuglevel="lines,vars,source" includeantruntime="false" source="1.8" target="1.8" />

我决定将项目转移到 Java 10。我将脚本中的规范更改为新版本:

<javac srcdir="${src}" classpathref="classpath" destdir="${build.bin}" compiler="javac10+" 
debug="true" debuglevel="lines,vars,source" includeantruntime="false" source="10" target="10" />

但是在编译包时,这一行给出了以下消息:

build.xml:65:找不到类:javac10+

在编译成功之前检查适当的 Java 版本:

<target name="check" description="Check requirements.">
    <echo message="Verification of your JDK version."/>
    <available classname="java.util.stream.Stream" property="JDK10+.present" />
    <fail unless="JDK10+.present" message="Java 10 is required, but your version is Java ${ant.java.version}. Install latest JDK." />
</target>

告诉我哪里出错了<javac/>,Java 10 的字符串应该是什么样子的?

ant
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-09-22 03:14:14 +0000 UTC

从 MANIFEST.MF 中读取属性

  • 1

编译Java应用程序时,会将数据输入到MANIFEST.MF文件中,然后在启动应用程序时使用该文件。清单文件包含编译后所需的所有内容。

Ant 脚本的部分代码:

<manifest>
    <attribute name="Built-By" value="${user.name}" />
    <attribute name="Built-Date" value="${build.tstamp}" />
    <attribute name="Implementation-Version" value="1.0.0.0" />
    <attribute name="Implementation-URL" value="http://example.com/" />
    <attribute name="Main-Class" value="src.app.MyApp" />
    <attribute name="Class-Path" value="${manifest.libs}" />
</manifest>

编译后的清单内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.1
Created-By: 1.8.0_151-b12 (Oracle Corporation)
Built-By: Rootware
Built-Date: 2018-09-21 21:59:11
Implementation-Version: 1.0.0.0
Implementation-URL: http://example.com/
Main-Class: src.app.MyApp
Class-Path: ../libs/c3p0-0.9.6-pre1.jar ../libs/json-simple-1.1.1.jar 
 ../libs/mchange-commons-java-0.2.12.jar ../libs/mysql-connector-java-
 5.1.46.jar

读取属性的Java代码:

private static void getBuildDate()
{
    try (InputStream stream = MyApp.class.getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF"))
    {
        final Manifest manifest = new Manifest();
        manifest.read(stream);
        final Attributes attributes = manifest.getMainAttributes();

        if (attributes.getValue("Built-Date") != null)
            BUILD_DATE = attributes.getValue("Built-Date");
        else
            _log.info("Null attribute.");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

读取Built-Date属性时始终为null。告诉我在阅读清单时我做错了什么?如果您尝试阅读Implementation-Version,则会显示Class-Path列表中的库列表中指定的第一个库的0.9.6-pre1版本。

java
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-09-03 10:59:01 +0000 UTC

确定 .NET Framework 和 Microsoft Visual C++ 的存在

  • 1

有哪些方法可以确定操作系统中已安装的.NET Framework和Microsoft Visual C++包?在应用程序启动之初检查是否存在特定或最低可接受版本的.NET Framework以便向用户显示后者是否存在是否有意义?或者如果在检查完成之前缺少所需的包,应用程序会抛出错误吗?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-31 14:54:18 +0000 UTC

从应用程序启动 EXE

  • 0

以下代码用于Application2从当前应用程序启动应用程序Application1:

private void ButtonStart_Click(object sender, RoutedEventArgs e)
{
    string file = Path.Combine("путь до папки приложения", "program.bin");
    if (!File.Exists(file))
        return;

    var processStartInfo = new ProcessStartInfo
    {
        FileName = file,
        UseShellExecute = false
    };

    Process.Start(processStartInfo);
}

在某些计算机上,无论是持续性还是间歇性,当您尝试从 启动应用程序Application2时Application1,后者会以“意外程序终止”或类似的方式关闭。

问题:这段代码有什么问题,有没有更好的方法来启动另一个 *.exe(bin) 应用程序?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-22 05:32:39 +0000 UTC

C# 对象字段复制

  • 0

我有一个形式的对象:

class Foo()
{
    Dictionary<string, int> _a;

    ....

    public Dictionary<string, int> getA()
    {
        return _a;
    }
}

我在另一个类中分配一个字段值来处理这些值(示例):

Dictionary<string, int> temp = Foo.getA();

但是如果我从字典中删除一个条目,那么它不会从当前变量中删除,而是从 object 的字段中删除Foo。

问题:如何从Foo类中复制_a字段的值?

PS由于这个问题对于解释可能的选项来说太宽泛了,我将解释以下内容。该变量_a存储应用程序文件的列表及其大小。当应用程序更新时,我只需将目录的当前状态与循环中的文件引用列表进行比较foreach()。我从分配 value 的变量中删除那些不需要更新的文件,Foo.getA()并将剩余的文件传输到流中以执行必要的操作。因此,在重复调用应用程序完整性检查后,列表为空,tk。当您再次从该字段中调用该值时,_a它们已经很少了,并且它们都被清除了。所有文件匹配。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-12 04:53:49 +0000 UTC

显卡对服务器重要吗?

  • 7

有一台普通计算机(2008 版)作为基于 Windows 7 x64 的服务器。插入并连接到互联网。如果您需要运行/配置某些东西,所有与它的连接都是通过 RDP 建立的。其余时间它在没有用户干预的情况下脱粒。我想尽可能减少噪音和热量的产生。没有嵌入视频。其他可用的母亲配备的 RAM 插槽较少。

于是问题就来了:

RDP 连接(最多 2 个连接)的最低显卡要求是什么?

我有的:

PCI-E GeForce 7600GT(它现在站着并发出噪音),某种90年代后期具有1-2MB内存的PCI卡(用于恢复显卡的BIOS)。像这样的S3 三重奏。

windows
  • 2 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-10 17:24:28 +0000 UTC

WPF 无法更新窗口元素

  • 2

DispatcherTimer在窗口代码内部使用了一个滑块。但是在转移到控制图片缓存和更改幻灯片的单独的单例线程类之后,会弹出一个错误。

帮助克服将图像传输到表单时发生的此错误。我不明白我做错了什么。就像通过委托发布对窗口的访问一样。和类似的结构一样,可以正常使用表单的文本字段,但不存在图像。

MainWindow.xaml.cs 代码:

public partial class MainWindow : Window
{
    private delegate void slideCacheUpdateDelegate(int slide, BitmapImage image);

    public MainWindow()
    {
        SlideCache.getInstance.init();

        InitializeComponent();

        // Initial slide cache updater delegate.
        SlideCache.OnRefresh += (s, i) =>
        {
            if (Dispatcher.CheckAccess())
                changeToNextSlide(s, i);
            else
                Dispatcher.BeginInvoke(new slideCacheUpdateDelegate(changeToNextSlide), new object[] { s, i });
        };

        SlideCache.getInstance.startSlideShow();
    }

    private void changeToNextSlide(int slide, BitmapImage image)
    {
        switch (slide)
        {
            case 1:
                this.imageSlide2.Source = image;
                DoubleAnimation animationSlide1 = new DoubleAnimation();
                animationSlide1.From = 0;
                animationSlide1.To = 1;
                animationSlide1.Duration = TimeSpan.FromMilliseconds(500);
                this.imageSlide2.BeginAnimation(Canvas.OpacityProperty, animationSlide1);
                break;

            case 2:
                this.imageSlide1.Source = image;
                DoubleAnimation animationSlide2 = new DoubleAnimation();
                animationSlide2.From = 1;
                animationSlide2.To = 0;
                animationSlide2.Duration = TimeSpan.FromMilliseconds(500);
                this.imageSlide2.BeginAnimation(Canvas.OpacityProperty, animationSlide2);
                break;
        }
    }
}

MainWindow.xaml 代码:

<Window x:Class="SlideShow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Width="200" Height="100" Background="Black">
            <Image Name="imageSlide1" Stretch="Fill"/>
            <Image Name="imageSlide2" Stretch="Fill"/>
        </StackPanel>
    </Grid>
</Window>

SlideCache.cs 代码:

public class SlideCache
{
    public delegate void Slider(int slide, BitmapImage holder);
    public static event Slider OnRefresh;

    private static volatile SlideCache INSTANCE;
    private static object syncRoot = new Object();

    private Thread _threadCache;
    private Thread _threadSlide;

    private Dictionary<int, BitmapHolder> _images;

    private int _currentSlide;

    private Boolean _isFirstImage;

    private SlideCache()
    {
        // Do nothing.
    }

    public void init()
    {
        initDictionary();

        _currentSlide = 0;
        _isFirstImage = true;

        _threadCache = new Thread(slideCache);
        _threadCache.IsBackground = true;
        _threadCache.SetApartmentState(ApartmentState.MTA);
        _threadCache.Start();
    }

    private void slideShow()
    {
        while (true)
        {
            ++_currentSlide;
            if (_images[_currentSlide] != null)
            {
                slideUpdate(_isFirstImage ? 1 : 2, _images[_currentSlide].getImage());
                _isFirstImage = !_isFirstImage;
            }

            Thread.Sleep(3000);
        }
    }

    private void slideCache()
    {
        while (true)
        {
            DateTime timestamp = DateTime.Now;
            for (int i = 0; i < 10; i++ )
            {
                int slideId = i + 1;
                BitmapHolder holder = _images[slideId];
                if (holder == null || holder.getTimestamp() < timestamp)
                {
                    BitmapImage image = new BitmapImage();
                    image.BeginInit();
                    image.UriSource = new Uri("http://example.com/slide_" + slideId);
                    image.EndInit();

                    if (holder != null && holder.getImage() != null && image.PixelWidth == 1)
                        continue;

                    _images[slideId] = new BitmapHolder(timestamp.AddSeconds(new Random().Next(180, 600)), image);
                }
            }

            Thread.Sleep(1000);
        }
    }

    private void initDictionary()
    {
        _images = new Dictionary<int, BitmapHolder>(10);

        for (int i = 0; i < 10; i++)
            _images.Add((i + 1), null);
    }

    private void slideUpdate(int slide, BitmapImage image)
    {
        OnRefresh.Invoke(slide, image);
    }

    public void startSlideShow()
    {
        _threadSlide = new Thread(slideShow);
        _threadSlide.IsBackground = true;
        _threadSlide.SetApartmentState(ApartmentState.MTA);
        _threadSlide.Start();
    }

    public void stopSlideShow()
    {
        _threadSlide.Abort();
    }

    public void changeToNextSlide(int slide)
    {
        _currentSlide = slide;
        slideUpdate(_isFirstImage ? 1 : 2, _images[_currentSlide].getImage());
        _isFirstImage = !_isFirstImage;
    }

    public Boolean slideShowEnabled()
    {
        return _threadSlide.ThreadState == ThreadState.Running;
    }

    public static SlideCache getInstance
    {
        get
        {
            if (INSTANCE == null)
            {
                lock (syncRoot)
                {
                    if (INSTANCE == null)
                        INSTANCE = new SlideCache();
                }
            }

            return INSTANCE;
        }
    }
}

BitmapHolder.cs 代码:

public class BitmapHolder
{
    private DateTime _timestamp;
    private BitmapImage _image;

    public BitmapHolder(DateTime timestamp, BitmapImage image)
    {
        _timestamp = timestamp;
        _image = image;
    }

    public DateTime getTimestamp()
    {
        return _timestamp;
    }

    public BitmapImage getImage()
    {
        return _image;
    }
}

启动应用程序时卡住并在VS中弹出以下错误:

用户代码未处理 System.InvalidOperationException调用线程无法访问此对象,因为另一个线程拥有此对象。

解决方案:

BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = new MemoryStream(new WebClient().DownloadData("http://example.com/Slide_" + slideId + ".png"));
image.EndInit();
image.Freeze();

感谢MSDN.WhiteKnight帮助我查看本地资源。您的回答最接近解决问题。

PS 问题本身不是从另一个线程访问 UI 元素,而是来自Singleton类的线程试图转移到 UI 的阻塞资源。那些。有必要将图片作为流并基于它创建资源。进一步如 MSDN 中的Freeze()共享描述。我希望它对某人有用,tk。问题不是孤立的,至少在 EN SO 是这样。

c#
  • 2 个回答
  • 10 Views
Martin Hope
Rootware
Asked: 2020-08-08 14:24:09 +0000 UTC

在 XAML 中加载外部元素样式

  • 0

有一个应用程序,其中包含按钮、文本字段、复选框和其他自定义项。每次我在每个窗口的 XAML 中添加必要的元素样式时,我都认为这不是错误的,因为 他们经常占用大部分代码。

例如,是否可以从这些元素的现成样式模板“加载它们”?如果是,那么请举一个这种用法的例子。

wpf
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5