我正在寻找C#中序列化的语言支持.我可以从ISerializable派生并通过在字节缓冲区中复制成员值来实现序列化.但是,我更喜欢像C/C++那样的自动方式.
请考虑以下代码:
using System;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace XBeeHelper
{
class XBee
{
[Serializable()]
public struct Frame<FrameType> where FrameType : struct
{
public Byte StartDelimiter;
public UInt16 Lenght;
public Byte APIIdentifier;
public FrameType FrameData;
public Byte Checksum;
}
[Serializable()]
public struct ModemStatus
{
public Byte Status;
}
public Byte[] TestSerialization()
{
Frame<ModemStatus> frame = new Frame<ModemStatus>();
frame.StartDelimiter = 1;
frame.Lenght = 2;
frame.APIIdentifier = 3;
frame.FrameData.Status = 4;
frame.Checksum = 5;
BinaryFormatter formatter = new …Run Code Online (Sandbox Code Playgroud) 在.Net中是否有标准方法来访问和修改Windows服务文件?现在我只是通过流访问文件并写入文件,就像我对任何其他文件一样.该文件位于c:\ windows\system32\drivers\etc \,但我担心这可能会在64位版本的Windows中发生变化,或者在不同版本的Windows中可能会有所不同(我可能是错的,不可否认,我的避风港我还非常关注这个问题.除此之外,我只是想知道是否有一种标准方式,比如通过WMI和/或System.Management命名空间来查找和修改服务文件.
我需要做的实际细节是检查是否为预期的端口指定了用于我们软件的某些数据库别名.如果没有,请添加它们.
我一直在寻找有关如何处理TCP消息框架的示例.我看到许多示例,其中NetworkStreams被传递到StreamReader或StreamWriter对象,然后使用ReadLine或WriteLine方法来处理'\n'分隔的消息.我的应用程序协议包含以'\n'结尾的消息,因此NetworkStream似乎是最佳选择.但是,我找不到任何关于正确处理所有这些与异步套接字相结合的方法的具体示例.当下面调用ReceiveCallback()时,如何实现NetworkStream和StreamReader类来处理消息框架?根据我所读到的内容,我可以在一次接收中获取一条消息的一部分,并在下一次接收时获取剩余的消息(包括'\n').这是否意味着我可以得到一条消息的结尾和下一条消息的一部分?当然,必须有一种更简单的方法来处理这个问题.
我有以下代码:
private void StartRead(Socket socket)
{
try
{
StateObject state = new StateObject();
state.AsyncSocket = socket;
socket.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (SocketException)
{
m_Socket.Shutdown(SocketShutdown.Both);
Disconnect();
}
}
private void ReceiveCallback(IAsyncResult ar)
{
try
{
StateObject state = (StateObject)ar.AsyncState;
int bytes_read = state.AsyncSocket.EndReceive(ar);
char[] chars = new char[bytes_read + 1];
System.Text.Decoder decoder = System.Text.Encoding.UTF8.GetDecoder();
int charLength = decoder.GetChars(state.Buffer, 0, bytes_read, chars, 0);
String data = new String(chars);
ParseMessage(data);
StartRead(state.AsyncSocket);
}
catch (SocketException)
{
m_Socket.Shutdown(SocketShutdown.Both);
Disconnect();
} …Run Code Online (Sandbox Code Playgroud) 我很难找到,对于Sqlite.Net数据提供程序(System.Data.Sqlite.dll)(新开发已经在这里分叉),各种类及其方法抛出了什么异常.我知道可以抛出SqliteExceptions,但什么时候?
我已经确保我有附带的System.Data.Sqlite.xml文档文件,但它似乎没有列出每个方法抛出的异常.
我不想将不必要的代码包装到try/catch块中(或盲目地捕获到处的通用Exception).
我知道SqliteConnection派生自DbConnection,而SqliteCommand派生自DbCommand,所以如果有必要,我想我可以查看那里的文档.但是,没有一个基类会列出SqliteException,那么何时会抛出这些类型的异常?
PS - 我使用的是版本1.0.64(从2009年开始......此时无法升级).
更新:
由于缺乏响应,有没有人使用System.Data.Sqlite.dll?如果是这样,您采取什么方法来处理可能从库中可用对象抛出的异常?有没有一些标准的方法来处理这些异常,因为似乎没有关于抛出的异常和哪些类的文档?
更新2:
我确实找到了在c:\ program files\SQLite.NET\Doc \下找到的SQLite.NET文档(看起来很明显).到目前为止很棒的文档,但它没有告诉你抛出了什么异常.到目前为止,我能做的最好的事情是查看继承的基类或实现的接口,并查看抛出的异常.这仍然无助于知道何时抛出SqliteException对象.
更新3:
在获得源代码后,似乎没有类本身包含任何/// <exception cref="ExceptionType">Something went wrong!</exception>xml注释.这解释了为什么SQLite.NET帮助文件或Visual Studio Intellisense都没有列出可能引发的任何异常.我已经创建了一个请求xml注释的票证,以包含例外,如果它们的优先级列表太低,则提供自己添加它们.对于任何可能感兴趣的人,我会及时更新这个问题.
我正在使用以下代码向文本框添加处理程序:
private void frmLogin_Load(object sender, EventArgs e)
{
foreach (Control tb in this.Controls)
{
if (tb is TextBox)
{
TextBox tb1 = (TextBox)tb;
tb1.KeyDown += new KeyEventHandler(TextBox_KeyDown);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也使用以下代码删除处理程序:
private void frmLogin_FormClosed(object sender, FormClosedEventArgs e)
{
foreach (Control tb in this.Controls)
{
if (tb is TextBox)
{
TextBox tb1 = (TextBox)tb;
tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown);
}
}
}
Run Code Online (Sandbox Code Playgroud)
是正确的方法还是有更好的选择?
嗨我的下载功能.
protected void downloadFunction(string fileName)
{
string filePath = @"D:\SoftwareFiles\";
LogMessageToFile("Download started " + filePath + fileName);
byte[] array = File.ReadAllBytes(filePath + fileName);
Response.Clear();
Response.ContentType = "application/x-newton-compatible-pkg";
Response.AppendHeader("Content-Disposition",
"attachment;filename=" + fileName);
Response.BinaryWrite(array);
Response.End();
}
Run Code Online (Sandbox Code Playgroud)
处理20,200mb的文件大小没问题.
处理1gb文件时,会抛出异常:
算术运算中溢出或下溢.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.ArithmeticException:算术运算中的溢出或下溢.
该怎么办?
我们公司有一个销售点系统,有许多附加功能,如订购和接收功能,销售和订单历史等.我们的主要问题是系统设计不正确,因此修复和修复需要很长时间.处理客户的要求.此外,我们正在使用的当前技术(Progress数据库,语言的Progress 4GL)由于数据库连接的多用户许可费等而对我们的客户产生了相当多的许可费用.
经过大量讨论后,看起来我们可能会从头开始(至少暂时保留当前产品).我们正在寻找以下几点:
使用一个漂亮的GUI前端创建系统(它当前是CHUI,并且应用程序的构建方式不允许我们重新设计前端......没有分层或分离业务逻辑和gui ......不寒而栗).
创建具有模块化不同功能的系统,使产品不必包含所有功能.这将为我们当前希望获得基本功能和更低价格标签的客户降低成本.那些想要它们的人可以使用铃声和口哨声.
使用适当的设计模式可以使产品随时轻松添加或更改任何部件(即更改数据库或更改前端而无需重写应用程序或大部分应用程序).这是今天的问题,因为Progress 4GL代码是直接针对数据库编译的.数据库中的小变化需要大量代码重新编译.
我们的新系统将基于Linux,客户端应用程序可以从一个或多个窗口框中提供功能.
所以我正在寻找的是关于哪些数据库和/或框架或编程语言可能会推荐给这类产品的任何建议.任何在这个领域有经验的人都可以指出我们正确的方向,甚至有一些想要避免的想法.我们已经考虑过.NET和SQL Express(我们不需要企业级数据库),但这会限制我们使用Windows(据我所知).我听说过Mono在Linux环境下编写.NET代码,但我对此还不太了解.我们还考虑了基于Java和MySql的实现.
总结一下,我们希望做到以下几点:
将许可成本降低到我们用于开发产品的技术上(Oracle,yikes!MySQL,很好.)
提供易于维护和支持的解决方案.
具有能够通过CHUI前端在"旧"硬件上运行的组件的解决方案.(我们的一些客户拥有40多个终端,为了转换为PC,需要大量现金).
建议将不胜感激.
谢谢
[更新]我应该注意到,我们目前正在进行总成本分析.这个问题旨在为我们提供一些"受过教育的"选项,以便考虑纳入或分析.任何可以分享有关客户端/服务器设置的经验/建议的人都会受到赞赏(不仅仅是那些有销售点系统经验的人......这只是一个奖励).
[UPDATE]
对于任何有兴趣的人,我们最终选择了Microsoft Dynamics NAV,LS Retail(销售点和其他各种东西的插件),然后做了一些(现在正在进行)定制工作.这种设置为我们提供了一个完全集成的g/l系统的额外好处,这是我们当前系统所缺乏的.
我因为试图在标题中使用单词问题而大喊大叫,所以这就是我想出来的.无论如何,这是关于参数类型的纯学术问题.
好的,所以这就是我得到的.
using System;
namespace TypeParamTest
{
internal class Program
{
private static void Main(string[] args)
{
PrintType(1, new object());
Console.ReadKey();
}
static void PrintType<T, Ttwo>(T first, Ttwo second)
{
Console.WriteLine(typeof(T) + " : " + typeof(Ttwo));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是清楚明确的(敏锐的读者会认为这是在深度C#第249页上找到的一个例子的简单扩展).我完全了解正在发生的事情,编译器说有一些类型(要定义T,然后为Ttwo).我不明白的是为什么在第65页上示例只有一个类型参数.
List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> conv);
Run Code Online (Sandbox Code Playgroud)
T在这种情况下,编译器如何知道?
考虑以下课程:
public class DerivedClassPool<TBase> where TBase : class
{
public TBase Get(Type componentType)
{
// Not important, but you get the idea
return Activator.CreateInstance(componentType) as TBase;
}
public TDerived SomeMethod<TDerived>() where TDerived : TBase
{
return Get(typeof(TBase)) as TDerived;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我已经将TBase泛型类参数限制为一个类:where TBase : class
我还将TDerived泛型方法参数限制为TBase或从中派生出来的东西:where TDerived : TBase.
我在线上收到错误as TDerived:
类型参数'TDerived'不能与'as'运算符一起使用,因为它没有类类型约束,也没有'class'约束
我明白为了防止错误我需要添加约束class,所以我得到:
where TDerived : class, TBase
Run Code Online (Sandbox Code Playgroud)
当TBase已经被限制为一个类并且TDerived被限制为一个类TBase或从它派生时,为什么我必须这样做?
我抓住了忙碌编码器Android开发4.2指南中演示的EU4You示例项目(由Mark Murphy提供,也就是StackOverflow上的commonsware).跟随此示例项目可能更容易,但我将尝试在问题中发布相关的代码部分.您还需要导入ActionBarSherlock项目.您还需要将Java编译器设置为1.6(以允许@Override注释).
注意:我已将min-sdk更改为8(2.3,Froyo),将target-sdk更改为16(4.1,Ice Cream Sandwich).
注意:我已将countriesframelayout id 更改为framelayout id left_pane并将其details更改为right_pane.
主要布局文件(layout-large-land):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/left_pane"
android:layout_weight="30"
android:layout_width="0px"
android:layout_height="fill_parent"
/>
<FrameLayout
android:id="@+id/right_pane"
android:layout_weight="70"
android:layout_width="0px"
android:layout_height="fill_parent"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
主要布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_pane"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
示例应用程序的原始版本有两个活动(准确地说是SherlockFragmentActivities).
如果单击列表片段中的国家/地区,EU4You(主要托管活动)将检查DetailsFragment的存在和可见性.如果存在,则会在该片段内加载国家/地区网站.如果没有,它将触发DetailsActivity,然后处理添加DetailsFragment(然后加载给定国家/地区的网站).
这很好用,就像在平板电脑和手机上支持多种屏幕布局的典型应用程序一样.
我的问题是我想删除DetailsActivity并坚持一个活动.每当我不在大型横向布局中时,我想用详细信息片段替换(替换)列表片段(换句话说,我要么是在平板电脑上的纵向布局,要么是在任何方向的手机上).所以我所做的,改变了EU4You SherlockFragmentActivity中的以下内容:
原文(对注释中提到的framelayout名称进行了轻微的命名修改......国家是left_pane,详情是right_pane):
@Override
public void onCountrySelected(Country c) {
String url=getString(c.url); …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×5
generics ×2
android ×1
asp.net ×1
asyncsocket ×1
commonsware ×1
database ×1
exception ×1
frameworks ×1
handler ×1
inheritance ×1
sockets ×1
sqlite ×1
wmi ×1