在C#中,使用委托异步地执行某些工作(调用BeginInvoke())和使用ThreadPool线程之间有任何区别,如下所示
public void asynchronousWork(object num)
{
//asynchronous work to be done
Console.WriteLine(num);
}
public void test()
{
Action<object> myCustomDelegate = this.asynchronousWork;
int x = 7;
//Using Delegate
myCustomDelegate.BeginInvoke(7, null, null);
//Using Threadpool
ThreadPool.QueueUserWorkItem(new WaitCallback(asynchronousWork), 7);
Thread.Sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
BeginInvoke确保线程池中的线程用于执行异步代码,所以有什么区别吗?
我在c#(.NET 2.0 Framework)中创建了一个复制实用程序,它复制文件,目录和递归子目录等.该程序有一个GUI,显示当前正在复制的文件,当前文件编号(序列),总数要复制的文件数和复制操作的完成百分比.还有一个进度条,它基于当前文件/总文件.
我的问题与复制大文件有关.我一直无法找到一种方法来指示大文件的总复制进度(使用我当前使用FileInfo.CopyTo方法的类结构).作为一种解决方法,我将文件复制操作和GUI显示分离到它们自己的线程,并设置一个视觉提示来显示正在完成的工作.至少用户知道程序没有被冻结并且仍在复制文件.
能够基于总字节数显示进度或者具有从FileInfo.CopyTo方法触发的某种类型的事件会更好,该方法指示从当前文件复制的总字节数.
我知道FileInfo.Length属性,所以我确信MacGuyver有一种基于此的事件,并且在GUI端有一个处理器读取更新的处理程序(可能基于检查FileInfo).使用某种类型的计时器的目标对象的长度属性?).
有谁知道我要忽视的方法.如果我可以避免它,我宁愿不重写我的类来通过流复制字节并以这种方式跟踪它(虽然我想我可能会坚持走那条路).
提前致谢
PS - 我现在一直坚持使用.NET 2.0框架,所以任何需要> = 3.0的功能的解决方案都不适合我.
PPS - 我对任何.NET语言的解决方案都很开放,而不仅仅是c#.
我有一个大约1000行的文件.除偶尔的行外,所有行都以七位数开头.我需要抓住这些线并实际上将它们与前一行连接起来.
我已经设法通过使用以下正则表达式模式匹配任何以七位数字开头的行:
^\d\{7}
Run Code Online (Sandbox Code Playgroud)
我似乎无法让它匹配任何与此模式不匹配的行,但这正是我所追求的.
作为我将嵌入这个问题的第二个问题.是否有可能匹配(或不匹配以保持与我正在尝试的一致)的任何行将自己连接到前一行(与将下一行连接到当前行的J命令相反))?
谢谢
我正在创建一个新的数据库,并想知道是否有任何缺点,我认为可能需要一个表添加众多索引.
如果我创建索引但最终没有使用它会导致任何问题吗?
我定义了以下结构:
public struct Call
{
public SourceFile caller;
public SourceFile callee;
public Call(SourceFile caller, SourceFile callee)
{
this.caller = caller;
this.callee = callee;
}
}
Run Code Online (Sandbox Code Playgroud)
稍后,我将它分配给另一个对象的Tag属性:
line.Tag = new Call(sf1, sf2);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试像这样检索Tag属性时,
Call call = line.Tag as Call;
Run Code Online (Sandbox Code Playgroud)
Visual Studio提供以下编译时错误:
必须在引用类型或可空类型中使用运算符
那是什么意思?我该如何解决?
是否可以在gVim中的两个单独的选项卡中打开两个文件,并将它们组合成一个带有split/vsplit窗口的选项卡?我更喜欢是否有办法指定要加入哪些标签,但即使是与之相反的标签:标签球也足够好.
谢谢
背景:
我正在尝试创建一个实用程序,允许我们的客户直接在Windows Mobile 6设备(Intermec CK3)上轻松格式化SD卡(实际上是mini-SD).这将优于FlashFormat等第三方工具或必须向客户提供读卡器(这将要求他们取出电池,拔出由脆弱的金属外壳固定的mini-SD卡,然后通过文件管理控件运行Windows格式化实用程序).我们的大多数客户都不是非常精通技术,因此可以自动运行或通过几次点击运行的实用程序将是理想的选择.
到目前为止我已尝试过以下内容:
在做了一些搜索到这个线程(在paraGOD附近回答)和这个博客之后,我决定走下一条使用Store Manager API的新路径,它具有FindFirstStore,FindNextStore,OpenStore,DismountStore等功能. .
我正在尝试在C#中执行此操作,因此我创建了必要的支持结构来表示API中使用的typdef.这是一个样本:
using System.Runtime.InteropServices;
// Try to match the struct typedef exactly (all caps, exact type names).
using DWORD = System.UInt32;
using TCHAR = System.String;
namespace SDFormatter
{
// http://msdn.microsoft.com/en-us/library/ee490035(v=WinEmbedded.60).aspx
// STORAGEDEVICEINFO (Storage Manager)
[StructLayout(LayoutKind.Sequential)]
public struct …Run Code Online (Sandbox Code Playgroud) 我试图在最后两个2或3天解决这个问题,但失败了.在ASP应用程序开发(设计模式或源代码)中的VS 2010工具箱没有显示所有控件(显示html和报告的),我可以通过右键单击(显示所有)来查看所有控件,但它们显示为灰色或处于非活动状态.在VS命令行中使用了devnev.exe进行重置,重新安装了VS,删除了C:\ Users\Ramzan\AppData\Local\Microsoft\VisualStudio\10.0中的四个隐藏文件.tbd,一切都是徒劳的.
这件事让我很生气.我有另一台机器,一切正常.请帮帮我,我真的做了一切可能
假设我在文本文件中有以下样式的行:
"12" "34" "some text "
"56" "78" "some more text"
.
.
.
etc.
Run Code Online (Sandbox Code Playgroud)
我希望能够删除前两列的引号.用Vim做这个的最好方法是什么(我目前正在使用gVim)?
我想通过使用可视模式至少删除每行的开头引号,然后输入命令 '<,'>s!^"!!
我想知道是否有办法选择整个文本列(一个字符直接沿着文件...或者超过1,但在这种情况下我只想要一个).如果可能,那么您是否可以将x命令(删除字符)应用于整个列.
可能有更好的方法来做到这一点.我正在寻找任何建议.
Just和FYI,我结合了一些建议.我的_vimrc文件现在有以下行:
let @q=':%s/"\([0-9]*\)"/\1/g^M'
Run Code Online (Sandbox Code Playgroud)
(注:^M是CTRLQ+ Enter模拟运行命令后,按下回车键)
现在我可以使用宏@q来删除文件中两个数字列的所有引号.