我正在用C#开发一个PC WinForms应用程序,需要稍后连接到微控制器.目前,出于测试目的,我在计算机上创建了一个虚拟零调制解调器,并将其与终端程序相关联.
我正在使用的虚拟零调制解调器是"com0com":http://sourceforge.net/projects/com0com/
以下是COM端口对设置的屏幕截图:

在我的应用程序中,我使用该组件serialPort.这就是serialPort的设置方式:
public bool SerialPortSetup(String cp)
{
String port = cp;
int baud = 19200;
Parity parity = Parity.None;
int databit = 8;
StopBits stopbit = StopBits.One;
try
{
// Initialize serial port
serialPort1 = new SerialPort(port, baud, parity, databit, stopbit);
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPortDataReceived);
serialPort1.Open();
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
serialPort的其他属性:

我连接到COM2的终端程序设置了相同的波特率,奇偶校验,数据位,停止位等.当我将自己的应用程序连接到COM1,终端连接到COM2时,一切正常.双向书写和阅读.
但是,当我不使用COM2端口(即终端程序未打开)时,我的应用程序挂起了我开始使用的第二个serialPort1.Write(str),其中str只是一个随机字符串.从Visual Studio运行我的应用程序时,我只能通过停止调试来关闭它.它不像Windows标记为"没有响应".顺便说一句,我总是在写入之前检查一个打开的serialPort.
我需要这个问题才能消失.想法?
我有这个用C++ Builder 6编写的程序.我没有编写所有代码,只是编写了一些代码.然而,语言不是C++(据我所知) - 它看起来更像是Delphi或Pascal.这就是我将它们全部包含在标签中的原因.
我有一个叫做的int Oversteering.
try
{
Oversteering=HoursCounter.ToInt();
}
catch(EConvertError &convertError)
{
Oversteering=0;
}
Run Code Online (Sandbox Code Playgroud)
HoursCounter 是一个AnsiString,它是一个int的形式.
因为这是整个代码中唯一的try/catch语句(这不太好,我知道),我在Delphi/Pascal/???中找不到任何好的例子,我不知道是不是写得不错.
好吧,我尝试将字符串转换为int.有时我会收到此错误:

也就是说,发生了一个名为EConvertError的异常.
所以我的问题是:为什么这个异常没有被catch语句捕获?
在Eclipse中开始使用Android Lint工具后,我收到了许多新警告。其中之一是说我的ImageViews缺少contentDescription。
对于常规的ImageView,我这样做是这样的,并且效果很好:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:contentDescription="@string/imgViewDesc"
....
</ImageView>
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个使用样式xml文件的ImageView,如下所示:
<ImageView
style="@style/TitleBarLogo"
android:src="@drawable/title_logo" />
Run Code Online (Sandbox Code Playgroud)
如果我在styles.xml中具有以下内容:
<style name="TitleBarLogo">
<item name="android:contentDescription">@string/imgViewDesc</item>
....
</style>
Run Code Online (Sandbox Code Playgroud)
警告并不会消失。
有没有什么办法解决这一问题?
我有一个自定义baseadapter,它会对一些图像进行一些延迟加载,然后对布局进行充气,这样我最终会得到一个listview,其中我将图像和文本放在一行中.
当用户按下列表视图中的一个项目时,比如说项目0(顶部项目),我想显示一个带有一些特定内容的对话框.此含量取决于项目数 - 因此对于项0示出的内容是不一样的,作为第1项,依此类推.
以下是getView自定义适配器的方法:
public View getView(int position, View convertView, ViewGroup parent)
{
View vi=convertView;
if(convertView==null)
{
vi = inflater.inflate(R.layout.facebook_item, null);
vi.setClickable(true);
vi.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
String s = "test";
Toast.makeText(myContext, s, Toast.LENGTH_SHORT).show();
}
});
}
TextView text=(TextView)vi.findViewById(R.id.text);
ImageView image=(ImageView)vi.findViewById(R.id.image);
text.setText(msg[position]);
text.getLineCount();
imageLoader.DisplayImage(data[position], image);
return vi;
}
Run Code Online (Sandbox Code Playgroud)
这里重要的是该onClick方法正在发生什么.我想有一个item参数,但这对于这个OnClickListener是不可能的.我知道,正常的列表视图是可能的.
那么 - 如何确定点击了哪个项目?
PS:我曾尝试过使用某种方式vi.setTag(<<number>>);,但是我没有看到如果没有为listview的所有项目设置相同的标签,这怎么办.
我有一个表,我想一次更新100行.我有一个用于查找特定行的100个ID的列表.找到后,我会为每一行更新一个列(SyncOk).
问题是更新100行大约需要23到30秒.
dbContext.Configuration.ValidateOnSaveEnabled = false;
var count = ids.Count;
for (var i = 0; i < count; i++)
{
var id = ids[i];
var record = await dbContext.History
.FirstOrDefaultAsync(r => r.Id == id);
record.SyncOk = syncOk;
}
await dbContext.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
一些说明:
ids是一个IList<long>拥有所有感兴趣的ID.syncOk 是一个布尔.AutoDetectChangesEnabled属性设置为false,然后在设置SyncOk值后手动更新记录- 不会加快速度.为什么SaveChangesAsync()这么慢 - 我怎样才能提高上述功能的速度?我担心该表在23-30秒内被锁定,并且会使其他服务(使用同一个表)也无法更新.