我不得不重新格式化我的一个驱动器(T :)并改变其目的.我安装了Visual Studio 2015,在格式化之前卸载它,现在驱动器有一个不同的字母(不能更改它,其他东西安装在它上面).我想再次安装visual studio 2015,但是在C:驱动器上.当我运行安装时,我得到了这个:
T:驱动器不再存在,我无法更改到另一个驱动器的安装路径.
我尝试了一些解决方案,我必须删除注册表项,但没有成功,因为大多数解决方案是旧版本的Visual Studio.有办法改变路径吗?
基本上,我想向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会是一样的所以我没有尝试(我知道他们是多线程的东西,但这就是我所熟悉的......)
我在为Xna制作的非常简单的游戏创建网络界面时遇到了麻烦.我只需要通过TCP客户端/ Socket发送对象.例如:我有一个名为"玩家"的班级.在每个播放器中,都有一个字段名称"Info",类型为"PlayerInfo".在客户端/服务器中,我需要将每个玩家的信息发送给每个客户,除了发送它的人(显然).这是一个简单的例子,但我需要用大约5-10个对象来做,再加上发送玩家更新(位置,动作......)有没有一种简单的方法来做TCP/Sock?注意:我会将我的知识评为C#并编程为6/10,因此如果您有解决方案,则无需解释所有内容(例如:变量和字段之间的区别).我也知道接口,库等...提前谢谢!
首先是一些背景
我有一个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上任何类型的网络限制,请告诉我.
在Xamarin项目中,我将链接器行为设置为"链接所有引用".这样做时,通过删除未使用的成员来优化程序集.一个问题,它实际上并不知道我们需要它们进行反思.我知道我们可以使用Preserve属性告诉链接器保留类中的所有符号,但是如果程序集是DLL或者不是iOS项目(不引用单触式程序集,并且不能).有没有办法可以将库中的所有类设置为"保留",忽略它,或者只设置某些要优化的类(反向PreserveAttribute)?
我正在尝试通过TcpClient(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("ééé");像魅力的作品.
有没有办法,在visual studio中,我可以启用代码热插拔?在java中,至少使用eclipse,你可以在运行时更改代码,保存它,它会在你的应用程序中瞬间改变.我知道有"编辑和继续"功能,但我想知道C#是否有相同的功能.
我最近开始使用新的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循环...
据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)
他们甚至发表评论,说他们需要保持字段一致.也许这只是我,但这真的是一个结构的东西?
我过去和单身人士一起工作,我知道这是一些解决静态界面问题的人的解决方案.在我的情况下,我不能真正使用单例,因为我有一个我继承的外部类,我无法控制这个(库).
基本上,我有很多继承自"TableRow"(类中的类)的类,我需要这些类中的每一个都实现某个静态方法(例如:GetStaticIdentifier).最后,我需要将这些对象存储在其中一种基类型中,并在此特定类型上使用静态方法.
我的问题是,除了使用单身人士之外还有另一个解决方案吗?在C#中是否有一个我不知道的功能可以帮助我解决这个问题?
我的项目中需要引用一个程序集,该程序集需要将“嵌入互操作类型”设置为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文档,但找不到如何执行此操作。可能吗?
c# ×9
.net ×2
ios ×2
tcp ×2
tcpclient ×2
xamarin ×2
xamarin.ios ×2
async-await ×1
asynchronous ×1
encoding ×1
hotswap ×1
inheritance ×1
installation ×1
interface ×1
linker ×1
nuget ×1
sockets ×1
static ×1
struct ×1