编辑:问题在较新版本的EF中得到解决.至少这是我假设的,因为我最近创建了一个新项目并遵循相同的步骤,一切都很顺利!感谢您的意见和帮助.我留下原始问题,未触及,下面.
我是第一次使用实体框架.我有一个奇怪的问题:我在SQL Server上有这个小数据库.以下是管理工作室的图表:
如您所见,外键都已定义.为了生成edmx模型,我选择了"New Item - > ADO.NET Entity Data Model - > Generate from database".这就是我得到的:
所有的协会都缺少了两个!这很奇怪,因为好老的L2S可以毫无问题地识别它们:
任何人都可以帮我解决这个问题吗?
我正在学习C#中的异步/等待模式.目前我正在尝试解决这样的问题:
有一个生产者(硬件设备)每秒生成1000个数据包.我需要将此数据记录到文件中.
该设备仅具有一次ReadAsync()
报告单个数据包的方法.
我需要缓冲数据包并按照它们生成的顺序将它们写入文件,每秒只执行一次.
如果写入过程没有在下一批数据包准备好写入时及时完成,则写操作应该失败.
到目前为止,我写了类似下面的内容.它有效,但我不确定这是否是解决问题的最佳方法.有任何意见或建议吗?在消费者需要汇总从生产者处收到的数据时,采用这种生产者/消费者问题的最佳做法是什么?
static async Task TestLogger(Device device, int seconds)
{
const int bufLength = 1000;
bool firstIteration = true;
Task writerTask = null;
using (var writer = new StreamWriter("test.log")))
{
do
{
var buffer = new byte[bufLength][];
for (int i = 0; i < bufLength; i++)
{
buffer[i] = await device.ReadAsync();
}
if (!firstIteration)
{
if (!writerTask.IsCompleted)
throw new Exception("Write Time Out!");
}
writerTask = Task.Run(() =>
{
foreach (var b in buffer)
writer.WriteLine(ToHexString(b)); …
Run Code Online (Sandbox Code Playgroud) 我正在绘制许多类似的图,所以我想我写了一个函数来简化任务.我想传递它data.frame
和要绘制的列的名称.这是我尝试过的:
plot_individual_subjects <- function(var, data)
{
require(ggplot2)
ggplot(data, aes(x=Time, y=var, group=Subject, colour=SubjectID)) +
geom_line() + geom_point() +
geom_text(aes(label=Subject), hjust=0, vjust=0)
}
Run Code Online (Sandbox Code Playgroud)
现在,如果var
是一个字符串,它将无法工作.如果将命令的aes
一部分更改为,它将无法工作ggplot
,y=data[,var]
并且它会抱怨无法对闭包进行子集化.
那么解决这个问题和类似问题的正确方法/最佳实践是什么?如何将列名轻松安全地传递给想要对data.frames进行处理的函数?
在Windows中捕获和记录全局USB鼠标事件的最佳方法是什么?我已经使用低级鼠标回调编写了一个小型数据捕获程序.但是,这对我来说不够低级:这种方法允许您捕获鼠标光标在屏幕上的位置(即屏幕坐标),而不是捕获实际上相对运动的实际鼠标事件(想想delta-x和delta-y).
我可以查看每个事件的位置增量,但由于屏幕坐标被剪切在0和屏幕宽度/高度之间,因此会丢失一些数据.此外,我不知道如果像游戏这样的全屏程序改变屏幕分辨率或做一些可能影响鼠标事件的其他事情会发生什么.
那么有没有其他用户模式方法来记录比SetWindowsHookEx
挂钩更低级别的USB鼠标事件?我想在Windows进行任何处理之前进入物理鼠标事件.
尝试停止SerialPort时,我遇到了一种奇怪的行为:在取消订阅和调用之后,DataReceived事件继续触发close
!(参见StopStreaming
以下代码).因此,在我的事件处理程序代码中,我得到一个InvalidOperationException,并显示"端口已关闭"的消息.
我错过了什么?关闭端口和停止事件的正确方法是什么?
编辑:我每次运行代码时都会收到此错误.所以这不是随机发生的竞争条件,而是一个系统性问题,表明代码完全破碎!但是,我没看到怎么样......
private SerialPort comPort = new SerialPort();
public override void StartStreaming()
{
comPort.Open();
comPort.DiscardInBuffer();
comPort.DataReceived += comPort_DataReceived;
}
public override void StopStreaming()
{
comPort.DataReceived -= comPort_DataReceived;
comPort.Close();
isStreaming = false;
}
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (e.EventType == SerialData.Chars)
{
SerialPort port = (SerialPort)sender;
int N = comPort.BytesToRead;
for (; N > 0; N--)
{
byte b = Convert.ToByte(comPort.ReadByte());
//... process b
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:按照建议,我将StopStreaming
代码更改为以下内容:
public override void …
Run Code Online (Sandbox Code Playgroud) c# ×3
.net ×2
async-await ×1
edmx ×1
ggplot2 ×1
mouseevent ×1
r ×1
serial-port ×1
usb ×1
winapi ×1