小编Phi*_*aré的帖子

Visual Studio安装路径变灰了

我不得不重新格式化我的一个驱动器(T :)并改变其目的.我安装了Visual Studio 2015,在格式化之前卸载它,现在驱动器有一个不同的字母(不能更改它,其他东西安装在它上面).我想再次安装visual studio 2015,但是在C:驱动器上.当我运行安装时,我得到了这个:

在此输入图像描述

T:驱动器不再存在,我无法更改到另一个驱动器的安装路径.

我尝试了一些解决方案,我必须删除注册表项,但没有成功,因为大多数解决方案是旧版本的Visual Studio.有办法改变路径吗?

installation visual-studio visual-studio-2015

33
推荐指数
4
解决办法
5万
查看次数

不允许异步锁定

基本上,我想向tcp服务器发出多个异步请求.我目前有一个只有同步的工作客户端,并在每次网络调用时阻止UI.由于多个请求几乎可能同时发生,我尝试这样做:

private object readonly readLock = new object(); 
public async Task UpdateDetailsAsync()
{
    //I want every request to wait their turn before requesting (using the connection) 
    //to prevent a read call from catching any data from another request
    lock (readLock)
    {
        Details details = await connection.GetDetailsAsync();
        detailsListBox.Items = details;
    }
}
Run Code Online (Sandbox Code Playgroud)

我确信这不是一个很好用的锁,但这是我能想到的唯一方法,可以让电话等待轮到他们.有没有我可以用来实现这种行为的对象?我认为Monitor会是一样的所以我没有尝试(我知道他们是多线程的东西,但这就是我所熟悉的......)

c# tcpclient async-await

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

通过tcp或套接字发送类型对象

我在为Xna制作的非常简单的游戏创建网络界面时遇到了麻烦.我只需要通过TCP客户端/ Socket发送对象.例如:我有一个名为"玩家"的班级.在每个播放器中,都有一个字段名称"Info",类型为"PlayerInfo".在客户端/服务器中,我需要将每个玩家的信息发送给每个客户,除了发送它的人(显然).这是一个简单的例子,但我需要用大约5-10个对象来做,再加上发送玩家更新(位置,动作......)有没有一种简单的方法来做TCP/Sock?注意:我会将我的知识评为C#并编程为6/10,因此如果您有解决方案,则无需解释所有内容(例如:变量和字段之间的区别).我也知道接口,库等...提前谢谢!

c# sockets tcpclient

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

当UI处于空闲状态时,iOS后台线程会变慢

首先是一些背景

我有一个Xamarin应用程序,基本上从远程服务器流式传输视频.我有一个像这样循环的后台线程(伪代码):

private void UpdateMethod()
{
    while (running)
    {
        bool success = WaitForUpdate();

        if (!success)
        {
            break;
        }

        Update update = GetUpdate();
        SendUpdateToConcurentQueue(update);
    }

    Disconnect();
}
Run Code Online (Sandbox Code Playgroud)

我像这样启动后台线程:

Thread thread = new Thread(UpdateMethod);
thread.IsBackground = true;
thread.Start();
Run Code Online (Sandbox Code Playgroud)

问题

当我开始流时,一切都很完美.只有在不与设备交互约10秒后,它变得非常慢.我已经从后台线程中输出了更新的数量,而且它们看起来要慢得多.我通常每次更新处理2-6次更新(60fps).当它超级慢时,我得到1个6更新周期.

令我困惑的一件事是:当我下拉iOS顶部栏菜单时,更新会恢复,流会突然恢复正常速度.更新速度上升了大约10秒,它又像疯了一样回落.

我试过的

我尝试启动一个只有它的Dispatch队列,如下所示:

DispatchQueue queue = new DispatchQueue("updateQueue");
queue.DispatchAsync(this.UpdateProcess);
Run Code Online (Sandbox Code Playgroud)

它似乎没有任何帮助.

我还试图在我的更新线程中更改QualityOfService属性,如下所示:

NSThread.Current.QualityOfService = NSQualityOfService.UserInitiated
Run Code Online (Sandbox Code Playgroud)

也不起作用!在我看来iOS由于某种原因降低了我的线程的优先级.如果我在我的UpdateMethod方法中放置一个断点,那么当应用程序没有滞后时它会被击中.但是当出现滞后时,断点就不会受到打击.现在这真让我困惑,因为代码仍在运行!我仍然收到更新,它只是慢一点......

编辑:我使用Instruments测试,发现网络受到限制......调查,但如果有人知道iOS上任何类型的网络限制,请告诉我.

c# multithreading xamarin.ios ios xamarin

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

Xamarin.iOS链接器删除了反射所需的类中的成员

在Xamarin项目中,我将链接器行为设置为"链接所有引用".这样做时,通过删除未使用的成员来优化程序集.一个问题,它实际上并不知道我们需要它们进行反思.我知道我们可以使用Preserve属性告诉链接器保留类中的所有符号,但是如果程序集是DLL或者不是iOS项目(不引用单触式程序集,并且不能).有没有办法可以将库中的所有类设置为"保留",忽略它,或者只设置某些要优化的类(反向PreserveAttribute)?

c# linker xamarin.ios ios xamarin

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

通过TcpClient(byte [])发送包含特殊字符的字符串

我正在尝试通过TcpClient(byte [])发送包含特殊字符的字符串.这是一个例子:

  • 客户在文本框中输入"amé"
  • 客户端使用特定编码将字符串转换为byte [] (我已经尝试了所有预定义的加上一些像"iso-8859-1")
  • 客户端通过TCP发送byte []
  • 服务器接收并输出使用相同编码重新转换的字符串(到列表框)

编辑:

我忘了提到结果字符串是"我?".

编辑-2(根据要求,这里是一些代码):

@DJKRAZE这里有一些代码:

byte[] buffer = Encoding.ASCII.GetBytes("amé");
(TcpClient)server.Client.Send(buffer);
Run Code Online (Sandbox Code Playgroud)

在服务器端:

byte[] buffer = new byte[1024];
Client.Recieve(buffer);
string message = Encoding.ASCII.GetString(buffer);
ListBox1.Items.Add(message);
Run Code Online (Sandbox Code Playgroud)

列表框中显示的字符串是"am?"

===解决方案===

Encoding encoding = Encoding.GetEncoding("iso-8859-1");
byte[] message = encoding.GetBytes("babé");
Run Code Online (Sandbox Code Playgroud)

更新:

简单地使用Encoding.Utf8.GetBytes("ééé");像魅力的作品.

.net c# encoding tcp special-characters

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

在C#中像Java一样热插拔代码

有没有办法,在visual studio中,我可以启用代码热插拔?在java中,至少使用eclipse,你可以在运行时更改代码,保存它,它会在你的应用程序中瞬间改变.我知道有"编辑和继续"功能,但我想知道C#是否有相同的功能.

c# hotswap visual-studio

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

异步等待使用TcpClient

我最近开始使用新的C#5.0"async"和"await"关键字.我以为我得到了扭曲,但意识到有一件事让我怀疑.这是我从远程TcpClient异步接收数据的方式.一旦我接受连接,我就调用这个函数:

static async void ReadAsync(TcpClient client)
{
    NetworkStream ns = client.GetStream();
    MemoryStream ms = new MemoryStream();
    byte[] buffer = new byte[1024];

    while(client.Connected)
    {
        int bytesRead = await ns.ReadAsync(buffer, 0, buffer.Length);
        ms.Write(buffer, 0, bytesRead);
        if (!ns.DataAvailable)
        {
            HandleMessage(ms.ToArray());
            ms.Seek(0, SeekOrigin.Begin);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

收到数据后,循环就会继续运行而不会读取任何内容.我在循环中用Console.WriteLine测试了这个.我正确使用它吗?我觉得我不应该使用while循环...

c# asynchronous tcp

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

为什么.NET的版本是一个类而不是结构?

ReferenceSource,该Version班是sealed,ICloneable,IComparable,IComparable<Version>,IEquatable<Version>.它也只存储int价值.是不是有一个特殊原因让.NET程序员选择将它变成一个类而不是结构?为什么有人需要null版本?

这是ReferenceSource的字段声明块:

// AssemblyName depends on the order staying the same
private int _Major;
private int _Minor;
private int _Build = -1;
private int _Revision = -1;
Run Code Online (Sandbox Code Playgroud)

他们甚至发表评论,说他们需要保持字段一致.也许这只是我,但这真的是一个结构的东西?

.net c# struct

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

静态接口等效C#

我过去和单身人士一起工作,我知道这是一些解决静态界面问题的人的解决方案.在我的情况下,我不能真正使用单例,因为我有一个我继承的外部类,我无法控制这个(库).

基本上,我有很多继承自"TableRow"(类中的类)的类,我需要这些类中的每一个都实现某个静态方法(例如:GetStaticIdentifier).最后,我需要将这些对象存储在其中一种基类型中,并在此特定类型上使用静态方法.

我的问题是,除了使用单身人士之外还有另一个解决方案吗?在C#中是否有一个我不知道的功能可以帮助我解决这个问题?

c# inheritance static interface

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

在NuGet包中将Interop类型嵌入为false

我的项目中需要引用一个程序集,该程序集需要将“嵌入互操作类型”设置为false才能成功进行编译。如果不放置此选项,则会出现编译时错误:

A reference was created to embedded interop assembly 'Interop.MSTSCLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because of an indirect reference to that assembly created by assembly 'AxInterop.MSTSCLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Consider changing the 'Embed Interop Types' property on either assembly.
Run Code Online (Sandbox Code Playgroud)

如果我只是有一个项目,我会将选项设置为false而不用担心它,但是现在我正在使用它制作一个nuget程序包,我试图找到一种在程序包设置选项的方法已添加

我的nuspec文件当前具有以下内容(省略了元数据):

<files>
  <file src="Interop.MSTSCLib.dll" target="lib\net40" />
  <file src="AxInterop.MSTSCLib.dll" target="lib\net40" />
</files>
Run Code Online (Sandbox Code Playgroud)

我查看了nuget文档,但找不到如何执行此操作。可能吗?

visual-studio nuget

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