小编eig*_*tx2的帖子

C#serialPort:如果Write()上没有收件人,应用程序将挂起(虚拟空调制解调器)

我正在用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# serial-port

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

虽然它包含在catch语句中,但不会捕获异常

我有这个用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语句捕获?

c++ delphi pascal c++builder

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

Android:在样式xml文件中包含内容描述

在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)

警告并不会消失。

有没有什么办法解决这一问题?

android android-xml

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

自定义适配器:获取膨胀列表视图中单击项目的项目编号

我有一个自定义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的所有项目设置相同的标签,这怎么办.

android android-adapter custom-adapter

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

EF SaveChangesAsync非常慢

我有一个表,我想一次更新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秒内被锁定,并且会使其他服务(使用同一个表)也无法更新.

c# entity-framework

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