我读到了useAsync这个FileStream构造函数中的参数:
FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean)
我尝试FileStream.ReadAsync()在 Winforms 应用程序中使用该方法,如下所示:
byte[] data;
FileStream fs;
public Form1()
{
InitializeComponent();
fs = new FileStream(@"C:\Users\iP\Documents\Visual Studio 2015\Projects\ConsoleApplication32\ConsoleApplication32\bin\Debug\hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 4096);
data = new byte[(int)fs.Length];
}
private async void button1_Click(object sender, EventArgs e)
{
await change();
}
async Task change()
{
textBox1.Text = "byte array made";
await fs.ReadAsync(data, 0, data.Length);
textBox1.Text = "finished";
}
Run Code Online (Sandbox Code Playgroud)
通过上述,textBox1.Text在调用之前和之后为属性设置的值ReadAsync()显示在表单上。但是如果我添加useAsync: true到FileStream构造函数调用中,文本框只显示"finished"。永远不会显示文本“生成的字节数组” …
当我还在学习 System.IO 时,在File Streamclass 的构造函数中,我发现有名为 类型的重载构造函数SafeFileHandle,我试图在互联网和 MSDN 文档上搜索,但我什么也看不懂,我发现甚至 更奇怪的词,比如IntPtr,有人能给我解释一下吗?
public FileStream (Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync);
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗,或者有什么好的网站可以让我学习吗?
我在 Google 中搜索arcLength,也许我能理解它,但是它如何在 EmguCV 或 OpenCV 中处理图像中的轮廓呢?我尝试使用 MATLAB 制作一个小图像。图像是9 x 9,我在图像中画了一条线,该线是 1 像素。我在 EmguCV 中使用此代码来检测轮廓:
VectorOfVectorOfPoint cons = new VectorOfVectorOfPoint();
CvInvoke.FindContours(img_gray, cons, null, RetrType.List, ChainApproxMethod.ChainApproxNone);
for(int i=0; i<cons.Size;i++)
{
VectorOfPoint points = cons[i];
for(int x =0; x<points.Size;x++)
{
temp[points[x]] = new Gray(255);
}
double c= CvInvoke.ArcLength(cons[i], true);
textBox1.Text = c.ToString();
}
imageBox2.Image = temp;
Run Code Online (Sandbox Code Playgroud)
arcLength曾是:
arcLength为 0。arcLength为 2。arcLength为 …