这是处理BackGroundWorker的正确方法吗?我不确定在调用.Dispose()之前是否需要删除事件.还在RunWorkerCompleted委托中调用.Dispose()确定吗?
public void RunProcessAsync(DateTime dumpDate)
{
BackgroundWorker worker = new BackgroundWorker();
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(dumpDate);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
// Do Work here
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
worker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork -= new DoWorkEventHandler(worker_DoWork);
worker.Dispose();
}
Run Code Online (Sandbox Code Playgroud) 有关托管与非托管资源的问题很多.我理解这两者的基本定义.但是,我很难知道资源或对象何时被管理或不受管理.
当我想到非托管资源时,我倾向于认为本机代码不是.NET的直接组成部分,例如pinvoke或编组资源.我通常认为资源意味着与使用硬件的东西接口,例如文件句柄或网络连接也是不受管理的.
那些包装本机非托管资源的.NET对象呢FileStream?
一个FileStream必须使用非托管资源,但是当我实现IDisposable模式,我认为这是一个管理的或者非托管资源?
到目前为止,我一直在假设如果对象实现IDisposable,那么它就被管理了.我怎么知道IntPtr应该作为非托管resoruce处理?
我想知道是不是建议在SQLite(或其他SQL引擎)中使用CASE语句来替换数据.例如,假设我有一个查询.
SELECT Users,
CASE WHEN Active = 0 THEN 'Inactive'
WHEN Active = 1 THEN 'Active'
WHEN Active = 2 THEN 'Processing'
ELSE 'ERROR' END AS Active
FROM UsersTable;
Run Code Online (Sandbox Code Playgroud)
何时更好地创建引用表并执行JOIN.在这种情况下,我将使用ActiveID,ActiveDescription创建一个表'ActiveStatesTable'并执行JOIN.
我正在寻找创建一个高频回调线程.基本上我需要一个以常规高频(高达100Hz)间隔执行的功能.我意识到Windows有一个正常的线程执行切片是〜15ms.我想指定一个可以快于15ms的常规间隔.
这就是我想要完成的.我有一个需要以一定间隔发送消息的外部设备.间隔根据情况而变化.我希望我不需要超过100Hz(10ms)的消息速率.
我当然可以实现一个自旋循环,但是,我希望有一个解决方案不需要浪费太多资源.
提供的问题/答案链接无法解决此问题.虽然我同意这个问题有几种不同的问题,但实际上没有一个好的解决方案可以解决问题.
提供的大多数答案都与使用秒表和手动执行计时任务有关,这完全是CPU密集型的.唯一可行的解决方案是使用多媒体定时器,有一些陷阱,正如Haans所说.我找到了另一种解决方案,但我将在下面添加.我不知道此时的陷阱,但我打算做一些测试和研究.我仍然对有关解决方案的评论感兴趣.
WINAPI通过电话
BOOL WINAPI CreateTimerQueueTimer(
_Out_ PHANDLE phNewTimer,
_In_opt_ HANDLE TimerQueue,
_In_ WAITORTIMERCALLBACK Callback,
_In_opt_ PVOID Parameter,
_In_ DWORD DueTime,
_In_ DWORD Period,
_In_ ULONG Flags
);
Run Code Online (Sandbox Code Playgroud)
和
BOOL WINAPI DeleteTimerQueueTimer(
_In_opt_ HANDLE TimerQueue,
_In_ HANDLE Timer,
_In_opt_ HANDLE CompletionEvent
);
Run Code Online (Sandbox Code Playgroud)
链接 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms682485%28v=vs.85%29.aspx 我正在使用PInvoke来完成此任务.但是,在处理多媒体计时器时也需要这样做.
我的PInvoke签名适合那些感兴趣的人. Pinvoke链接
[DllImport("kernel32.dll")]
static extern bool CreateTimerQueueTimer(out IntPtr phNewTimer,
IntPtr TimerQueue, WaitOrTimerDelegate Callback, IntPtr Parameter,
uint DueTime, uint Period, uint Flags);
// This is the callback delegate to use.
public delegate …Run Code Online (Sandbox Code Playgroud) 是否有一个SELECT命令可以列出所有附加的数据库,类似于sqlite3中提供的.database命令?
我有一个类,我想创建一个关于如何使用的简单示例.但是,当我在类声明中使用标记时,该示例不会出现在Sandcastle输出中.它适用于对象的成员,但不适用于类本身.沙堡可以处理吗?
我想做的一个例子是.
这有一个关于如何使用该类的示例.我怎样才能在课堂上加入这样的东西?
我想这样做:
/// <summary> My example class </summary>
/// <example>
/// <code>
/// // Example code on how to use the class
/// </code>
/// </example>
public class MyClass
{
public string MyString {get;set;}
}
Run Code Online (Sandbox Code Playgroud) 在深层视图中编写视图和嵌套视图时,我有时会遗漏某些内容并最终丢失行/数据.如何检查两个不同表中的列是否具有完全匹配的数据?
例:
select count(distinct table1.col1)
from table1
where table1.col1 not in (select distinct table2.col1
from table2);
Run Code Online (Sandbox Code Playgroud)
这将返回table1.col1中不在table2中的值的数量.但是,我不知道这是一个很好的解决方案,因为它不计算table1.col1中不存在的table2.col1值.
我有以下内容。
public static Thread testThread = new Thread(ThreadStart) {Name = "TestThread", IsBackground = true};
private void Form_Load()
{
testThread.Start()
}
private static void ThreadStart()
{
int count = 0;
try
{
while (true)
{
count++;
}
}
catch (Exception ex)
{
StreamWriter stream = new StreamWriter(File.OpenWrite("Exception.txt"));
stream.WriteLine(count + "\n" + ex);
stream.Flush();
stream.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时,Thread.Abort()我捕捉到异常并写出到文件中。但是,如果我改为关闭应用程序,则不会写入任何内容。我也有
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.ThreadException +=
new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Run Code Online (Sandbox Code Playgroud)
但它似乎从未抛出异常。
我想添加一个问题是谨慎的。
当父进程退出时,正在运行的后台线程会发生什么?我的理解是抛出 ThreadAbortException 以退出线程。如果是这种情况,如何捕获 ThreadAbortException 以清理线程中可能存在的资源?
区分同一类型的两个异常但出于不同原因抛出的最佳方法是什么.
例如,InvalidOperationException可以抛出尝试访问空序列,但也可以在使用Concurrent对象时抛出(例如BlockingCollection)
从我的阅读中我得出结论,使用BlockingCollection.CompleteAdding()信号完成是完全正常的,因此需要捕获异常并适当处理(例如退出任务)
在不使用消息内容的情况下过滤这些内容的最佳方法是什么?
编辑:它们似乎都具有相同的HResult值.
当我检查a时ContactItem,所有Email#Address值都为空.我已经尝试设置值然后打印值.此更改反映在Outlook中,但是,无法通过PowerShell检索任何值.
以下是一些片段:
$Outlook=NEW-OBJECT –comobject Outlook.Application
$Contacts=$Outlook.session.GetDefaultFolder(10).items
$Contactsfolders = $Outlook.session.GetDefaultFolder(10).Folders
$testFolder = $Contactsfolders | Where-Object {$_.Name -eq 'Test Folder'}
$testContact = $testFolder.Items(1)
echo $testContact
$testContact.Email1Address = "BobDoe3@doe.com"
echo $testContact
Run Code Online (Sandbox Code Playgroud)
这是上述执行的输出.注意我已经删除了一些不感兴趣的信息以缩短.
第一回声
Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class : 40
Session : Microsoft.Office.Interop.Outlook.NameSpaceClass
ConversationTopic : John Doe
FormDescription : System.__ComObject
GetInspector : System.__ComObject
Importance : 1
LastModificationTime : 10/31/2017 5:57:04 PM
MAPIOBJECT : System.__ComObject
MessageClass : IPM.Contact
OutlookInternalVersion : 154971
OutlookVersion : 15.0
Saved : True
Sensitivity : 0
Size : 11614 …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×6
sqlite ×3
sql ×2
database ×1
exception ×1
idisposable ×1
mysql ×1
outlook ×1
powershell ×1
resources ×1
sandcastle ×1
select ×1